diff --git a/src/app.js b/src/app.js
index ed4f786c..3df07c45 100644
--- a/src/app.js
+++ b/src/app.js
@@ -51,8 +51,12 @@ import NavMenu from './views/NavMenu.vue';
// components
import SimpleSwitch from './components/settings/SimpleSwitch.vue';
-import PreviousInstanceInfo from './views/dialogs/PreviousInstanceInfo.vue';
import Location from './components/common/Location.vue';
+import FavoritesWorldTab from './components/favorites/FavoritesWorldTab.vue';
+
+// dialogs
+import WorldDialog from './views/dialogs/WorldDialog.vue';
+import PreviousInstanceInfoDialog from './views/dialogs/PreviousInstanceInfoDialog.vue';
// main app classes
import _sharedFeed from './classes/sharedFeed.js';
@@ -189,15 +193,16 @@ console.log(`isLinux: ${LINUX}`);
NavMenu,
// components
+ // - common
+ Location,
+ // - favorites
+ FavoritesWorldTab,
// - settings
SimpleSwitch,
- // components
- // - common
- Location,
-
// - dialogs
- PreviousInstanceInfo
+ PreviousInstanceInfoDialog,
+ WorldDialog
},
provide() {
return {
@@ -206,7 +211,8 @@ console.log(`isLinux: ${LINUX}`);
adjustDialogZ: this.adjustDialogZ,
getWorldName: this.getWorldName,
userImage: this.userImage,
- userStatusClass: this.userStatusClass
+ userStatusClass: this.userStatusClass,
+ getGroupName: this.getGroupName
};
},
el: '#root',
@@ -6096,25 +6102,6 @@ console.log(`isLinux: ${LINUX}`);
}
};
- $app.methods.deleteFavorite = function (objectId) {
- API.deleteFavorite({
- objectId
- });
- // FIXME: 메시지 수정
- // this.$confirm('Continue? Delete Favorite', 'Confirm', {
- // confirmButtonText: 'Confirm',
- // cancelButtonText: 'Cancel',
- // type: 'info',
- // callback: (action) => {
- // if (action === 'confirm') {
- // API.deleteFavorite({
- // objectId
- // });
- // }
- // }
- // });
- };
-
$app.methods.deleteFavoriteNoConfirm = function (objectId) {
if (!objectId) {
return;
@@ -6185,21 +6172,6 @@ console.log(`isLinux: ${LINUX}`);
return this.favoriteWorldsSorted;
};
- $app.computed.groupedByGroupKeyFavoriteWorlds = function () {
- const groupedByGroupKeyFavoriteWorlds = {};
-
- this.favoriteWorlds.forEach((world) => {
- if (world.groupKey) {
- if (!groupedByGroupKeyFavoriteWorlds[world.groupKey]) {
- groupedByGroupKeyFavoriteWorlds[world.groupKey] = [];
- }
- groupedByGroupKeyFavoriteWorlds[world.groupKey].push(world);
- }
- });
-
- return groupedByGroupKeyFavoriteWorlds;
- };
-
$app.computed.favoriteAvatars = function () {
if (this.sortFavoriteAvatars) {
this.sortFavoriteAvatars = false;
@@ -10576,9 +10548,8 @@ console.log(`isLinux: ${LINUX}`);
});
$app.methods.showWorldDialog = function (tag, shortName) {
- this.$nextTick(() => $app.adjustDialogZ(this.$refs.worldDialog.$el));
- var D = this.worldDialog;
- var L = $utils.parseLocation(tag);
+ const D = this.worldDialog;
+ const L = $utils.parseLocation(tag);
if (L.worldId === '') {
return;
}
@@ -11049,9 +11020,6 @@ console.log(`isLinux: ${LINUX}`);
case 'Refresh':
this.showWorldDialog(D.id);
break;
- case 'Share':
- this.copyWorldUrl(D.id);
- break;
case 'New Instance':
this.showNewInstanceDialog(D.$location.tag);
break;
@@ -11209,30 +11177,6 @@ console.log(`isLinux: ${LINUX}`);
});
};
- $app.methods.refreshWorldDialogTreeData = function () {
- var D = this.worldDialog;
- D.treeData = $utils.buildTreeData(D.ref);
- };
-
- $app.computed.worldDialogPlatform = function () {
- var { ref } = this.worldDialog;
- var platforms = [];
- if (ref.unityPackages) {
- for (var unityPackage of ref.unityPackages) {
- var platform = 'PC';
- if (unityPackage.platform === 'standalonewindows') {
- platform = 'PC';
- } else if (unityPackage.platform === 'android') {
- platform = 'Android';
- } else if (unityPackage.platform) {
- ({ platform } = unityPackage);
- }
- platforms.unshift(`${platform}/${unityPackage.unityVersion}`);
- }
- }
- return platforms.join(', ');
- };
-
// #endregion
// #region | App: Avatar Dialog
@@ -11805,18 +11749,6 @@ console.log(`isLinux: ${LINUX}`);
});
};
- $app.methods.moveFavorite = function (ref, group, type) {
- API.deleteFavorite({
- objectId: ref.id
- }).then(() => {
- API.addFavorite({
- type,
- favoriteId: ref.id,
- tags: group.name
- });
- });
- };
-
$app.methods.showFavoriteDialog = function (type, objectId) {
this.$nextTick(() => $app.adjustDialogZ(this.$refs.favoriteDialog.$el));
var D = this.favoriteDialog;
@@ -13264,30 +13196,6 @@ console.log(`isLinux: ${LINUX}`);
this.copyToClipboard(`https://vrchat.com/home/avatar/${avatarId}`);
};
- $app.methods.copyWorldId = function (worldId) {
- this.$message({
- message: 'World ID copied to clipboard',
- type: 'success'
- });
- this.copyToClipboard(worldId);
- };
-
- $app.methods.copyWorldUrl = function (worldId) {
- this.$message({
- message: 'World URL copied to clipboard',
- type: 'success'
- });
- this.copyToClipboard(`https://vrchat.com/home/world/${worldId}`);
- };
-
- $app.methods.copyWorldName = function (worldName) {
- this.$message({
- message: 'World name copied to clipboard',
- type: 'success'
- });
- this.copyToClipboard(worldName);
- };
-
$app.methods.copyUserId = function (userId) {
this.$message({
message: 'User ID copied to clipboard',
@@ -16829,8 +16737,6 @@ console.log(`isLinux: ${LINUX}`);
this.userDialog.isFavoriteWorldsLoading = false;
};
- $app.data.worldGroupVisibilityOptions = ['private', 'friends', 'public'];
-
$app.methods.userFavoriteWorldsStatus = function (visibility) {
var style = {};
if (visibility === 'public') {
@@ -16843,33 +16749,6 @@ console.log(`isLinux: ${LINUX}`);
return style;
};
- $app.methods.userFavoriteWorldsStatusForFavTab = function (visibility) {
- let style = '';
- if (visibility === 'public') {
- style = '';
- } else if (visibility === 'friends') {
- style = 'success';
- } else {
- style = 'info';
- }
- return style;
- };
-
- $app.methods.changeWorldGroupVisibility = function (name, visibility) {
- var params = {
- type: 'world',
- group: name,
- visibility
- };
- API.saveFavoriteGroup(params).then((args) => {
- this.$message({
- message: 'Group visibility changed',
- type: 'success'
- });
- return args;
- });
- };
-
$app.methods.refreshInstancePlayerCount = function (instance) {
var L = $utils.parseLocation(instance);
if (L.isRealInstance) {
@@ -20545,27 +20424,6 @@ console.log(`isLinux: ${LINUX}`);
return favoriteGroup.length;
};
- $app.methods.promptNewLocalWorldFavoriteGroup = function () {
- this.$prompt(
- $t('prompt.new_local_favorite_group.description'),
- $t('prompt.new_local_favorite_group.header'),
- {
- distinguishCancelAndClose: true,
- confirmButtonText: $t('prompt.new_local_favorite_group.ok'),
- cancelButtonText: $t('prompt.new_local_favorite_group.cancel'),
- inputPattern: /\S+/,
- inputErrorMessage: $t(
- 'prompt.new_local_favorite_group.input_error'
- ),
- callback: (action, instance) => {
- if (action === 'confirm' && instance.inputValue) {
- this.newLocalWorldFavoriteGroup(instance.inputValue);
- }
- }
- }
- );
- };
-
$app.methods.newLocalWorldFavoriteGroup = function (group) {
if (this.localWorldFavoriteGroups.includes(group)) {
$app.$message({
@@ -20585,35 +20443,6 @@ console.log(`isLinux: ${LINUX}`);
this.sortLocalWorldFavorites();
};
- $app.methods.promptLocalWorldFavoriteGroupRename = function (group) {
- this.$prompt(
- $t('prompt.local_favorite_group_rename.description'),
- $t('prompt.local_favorite_group_rename.header'),
- {
- distinguishCancelAndClose: true,
- confirmButtonText: $t(
- 'prompt.local_favorite_group_rename.save'
- ),
- cancelButtonText: $t(
- 'prompt.local_favorite_group_rename.cancel'
- ),
- inputPattern: /\S+/,
- inputErrorMessage: $t(
- 'prompt.local_favorite_group_rename.input_error'
- ),
- inputValue: group,
- callback: (action, instance) => {
- if (action === 'confirm' && instance.inputValue) {
- this.renameLocalWorldFavoriteGroup(
- instance.inputValue,
- group
- );
- }
- }
- }
- );
- };
-
$app.methods.renameLocalWorldFavoriteGroup = function (newName, group) {
if (this.localWorldFavoriteGroups.includes(newName)) {
$app.$message({
@@ -20634,19 +20463,6 @@ console.log(`isLinux: ${LINUX}`);
this.sortLocalWorldFavorites();
};
- $app.methods.promptLocalWorldFavoriteGroupDelete = function (group) {
- this.$confirm(`Delete Group? ${group}`, 'Confirm', {
- confirmButtonText: 'Confirm',
- cancelButtonText: 'Cancel',
- type: 'info',
- callback: (action) => {
- if (action === 'confirm') {
- this.deleteLocalWorldFavoriteGroup(group);
- }
- }
- });
- };
-
$app.methods.sortLocalWorldFavorites = function () {
this.localWorldFavoriteGroups.sort();
if (!this.sortFavorites) {
@@ -20729,11 +20545,10 @@ console.log(`isLinux: ${LINUX}`);
this.refreshingLocalFavorites = false;
};
- $app.data.worldFavoriteSearch = '';
$app.data.worldFavoriteSearchResults = [];
- $app.methods.searchWorldFavorites = function () {
- var search = this.worldFavoriteSearch.toLowerCase();
+ $app.methods.searchWorldFavorites = function (worldFavoriteSearch) {
+ var search = worldFavoriteSearch.toLowerCase();
if (search.length < 3) {
this.worldFavoriteSearchResults = [];
return;
@@ -22447,27 +22262,6 @@ console.log(`isLinux: ${LINUX}`);
);
};
- // favorites Tab
- // - local favorites
- // - local world & avatar
- $app.data.localFavoriteShowDelayedContent = [false, false];
-
- $app.methods.onFavTabClick = function (el) {
- if (el.index === '0') {
- this.localFavoriteShowDelayedContent = [false, false];
- } else {
- setTimeout(() => {
- requestAnimationFrame(() => {
- if (el.index === '1') {
- this.localFavoriteShowDelayedContent = [true, false];
- } else if (el.index === '2') {
- this.localFavoriteShowDelayedContent = [false, true];
- }
- });
- }, 300);
- }
- };
-
// #endregion
// #region | Tab Props
diff --git a/src/classes/memos.js b/src/classes/memos.js
index 6aafbcb1..27de5c89 100644
--- a/src/classes/memos.js
+++ b/src/classes/memos.js
@@ -84,11 +84,6 @@ export default class extends baseClass {
});
},
- onWorldMemoChange() {
- var D = this.worldDialog;
- this.saveWorldMemo(D.id, D.memo);
- },
-
async getWorldMemo(worldId) {
try {
return await database.getWorldMemo(worldId);
@@ -102,18 +97,6 @@ export default class extends baseClass {
}
},
- saveWorldMemo(worldId, memo) {
- if (memo) {
- database.setWorldMemo({
- worldId,
- editedAt: new Date().toJSON(),
- memo
- });
- } else {
- database.deleteWorldMemo(worldId);
- }
- },
-
onAvatarMemoChange() {
var D = this.avatarDialog;
this.saveAvatarMemo(D.id, D.memo);
diff --git a/src/classes/prompts.js b/src/classes/prompts.js
index 4aecf8fa..858cb941 100644
--- a/src/classes/prompts.js
+++ b/src/classes/prompts.js
@@ -294,6 +294,7 @@ export default class extends baseClass {
);
},
+ // remove when finished fav tab split
changeFavoriteGroupName(ctx) {
this.$prompt(
$t('prompt.change_favorite_group_name.description'),
diff --git a/src/components/charts/InstanceActivity.vue b/src/components/charts/InstanceActivity.vue
index 4052d994..b4dff9a9 100644
--- a/src/components/charts/InstanceActivity.vue
+++ b/src/components/charts/InstanceActivity.vue
@@ -17,8 +17,7 @@
+ style="margin-left: 5px; font-size: 12px; opacity: 0.7">
@@ -36,8 +35,7 @@
v-model.lazy="barWidth"
:max="50"
:min="1"
- @change="changeBarWidth"
- >
+ @change="changeBarWidth">
@@ -54,8 +52,7 @@
{{ $t('view.charts.instance_activity.settings.show_no_friend_instance') }}
+ @change="changeIsNoFriendInstanceVisible">
@@ -68,8 +65,7 @@
+ @click="changeSelectedDateFromBtn(false)">
+ @change="reloadData">
@@ -115,8 +110,7 @@
:is-dark-mode="isDarkMode"
:dt-hour12="dtHour12"
:bar-width="barWidth"
- @open-previous-instance-info-dialog="$emit('open-previous-instance-info-dialog', $event)"
- />
+ @open-previous-instance-info-dialog="$emit('open-previous-instance-info-dialog', $event)" />
@@ -292,46 +286,79 @@
initEcharts() {
const chartsHeight = this.activityData.length * (this.barWidth + 10) + 200;
const chartDom = this.$refs.activityChartRef;
- if (!this.echartsInstance) {
+
+ const afterInit = () => {
+ this.echartsInstance.resize({
+ height: chartsHeight,
+ animation: {
+ duration: 300
+ }
+ });
+
+ const handleClickYAxisLabel = (params) => {
+ const detailDataIdx = this.filteredActivityDetailData.findIndex((arr) => {
+ const sameLocation = arr[0]?.location === this.activityData[params?.dataIndex]?.location;
+ const sameJoinTime = arr
+ .find((item) => item.user_id === this.API.currentUser.id)
+ ?.joinTime.isSame(this.activityData[params?.dataIndex].joinTime);
+ return sameLocation && sameJoinTime;
+ });
+ if (detailDataIdx === -1) {
+ // no detail chart down below, it's hidden, so can't find instance data index
+ console.error(
+ "handleClickYAxisLabel failed, likely current user wasn't in this instance.",
+ params
+ );
+ } else {
+ this.$refs.activityDetailChartRef[detailDataIdx].$el.scrollIntoView({
+ behavior: 'smooth',
+ block: 'start'
+ });
+ }
+ };
+
+ const options = this.activityData.length ? this.getNewOption() : {};
+
+ this.echartsInstance.setOption(options, { lazyUpdate: true });
+ this.echartsInstance.on('click', 'yAxis', handleClickYAxisLabel);
+ this.isLoading = false;
+ };
+
+ const initEchartsInstance = () => {
this.echartsInstance = this.echarts.init(chartDom, `${this.isDarkMode ? 'dark' : null}`, {
height: chartsHeight
});
this.resizeObserver.observe(chartDom);
- }
-
- this.echartsInstance.resize({
- height: chartsHeight,
- animation: {
- duration: 300
- }
- });
-
- const handleClickYAxisLabel = (params) => {
- const detailDataIdx = this.filteredActivityDetailData.findIndex((arr) => {
- const sameLocation = arr[0]?.location === this.activityData[params?.dataIndex]?.location;
- const sameJoinTime = arr
- .find((item) => item.user_id === this.API.currentUser.id)
- ?.joinTime.isSame(this.activityData[params?.dataIndex].joinTime);
- return sameLocation && sameJoinTime;
- });
- if (detailDataIdx === -1) {
- console.error(
- "handleClickYAxisLabel failed, likely current user wasn't in this instance",
- params
- );
- } else {
- this.$refs.activityDetailChartRef[detailDataIdx].$el.scrollIntoView({
- behavior: 'smooth',
- block: 'start'
- });
- }
};
- const options = this.activityData.length ? this.getNewOption() : {};
+ const loadEchartsWithTimeout = () => {
+ const timeout = 5000;
+ let time = 0;
+ const timer = setInterval(() => {
+ if (this.echarts) {
+ initEchartsInstance();
+ afterInit();
+ clearInterval(timer);
+ return;
+ }
+ time += 100;
+ if (time >= timeout) {
+ clearInterval(timer);
+ console.error('echarts init timeout');
+ }
+ }, 100);
+ };
- this.echartsInstance.setOption(options, { lazyUpdate: true });
- this.echartsInstance.on('click', 'yAxis', handleClickYAxisLabel);
- this.isLoading = false;
+ if (!this.echartsInstance) {
+ if (!this.echarts) {
+ loadEchartsWithTimeout();
+ } else {
+ initEchartsInstance();
+ afterInit();
+ }
+ } else {
+ afterInit();
+ }
},
getNewOption() {
const getTooltip = (params) => {
diff --git a/src/components/common/Location.vue b/src/components/common/Location.vue
index bbf19562..dd24ad4e 100644
--- a/src/components/common/Location.vue
+++ b/src/components/common/Location.vue
@@ -21,7 +21,13 @@
export default {
// eslint-disable-next-line vue/multi-word-component-names
name: 'Location',
- inject: ['API'],
+ inject: {
+ // prevent randomly error
+ // not good idea, it's temporary
+ API: { default: window.API },
+ getWorldName: { default: window.$app?.getWorldName },
+ getGroupName: { default: window.$app?.getGroupName }
+ },
props: {
location: String,
traveling: String,
@@ -82,8 +88,7 @@
} else if (L.worldId) {
var ref = this.API.cachedWorlds.get(L.worldId);
if (typeof ref === 'undefined') {
- // TODO: USE props
- $app.getWorldName(L.worldId).then((worldName) => {
+ this.getWorldName(L.worldId).then((worldName) => {
if (L.tag === instanceId) {
if (L.instanceId) {
this.text = `${worldName} #${L.instanceName} ${L.accessTypeName}`;
@@ -102,8 +107,7 @@
this.groupName = this.grouphint;
} else if (L.groupId) {
this.groupName = L.groupId;
- // TODO: USE props
- $app.getGroupName(instanceId).then((groupName) => {
+ this.getGroupName(instanceId).then((groupName) => {
if (L.tag === instanceId) {
this.groupName = groupName;
}
@@ -153,5 +157,3 @@
}
};
-
-
diff --git a/src/components/favorites/FavoritesWorldItem.vue b/src/components/favorites/FavoritesWorldItem.vue
new file mode 100644
index 00000000..dfe831e4
--- /dev/null
+++ b/src/components/favorites/FavoritesWorldItem.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
![]()
+
+
+ {{ localFavFakeRef.name }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ favorite.name || favorite.id }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/favorites/FavoritesWorldTab.vue b/src/components/favorites/FavoritesWorldTab.vue
new file mode 100644
index 00000000..45634d30
--- /dev/null
+++ b/src/components/favorites/FavoritesWorldTab.vue
@@ -0,0 +1,382 @@
+
+
+
+
+ {{
+ $t('view.favorite.export')
+ }}
+ {{
+ $t('view.favorite.import')
+ }}
+
+
+ {{ $t('view.favorite.sort_by') }}
+
+ {{
+ $t('view.settings.appearance.appearance.sort_favorite_by_name')
+ }}
+ {{
+ $t('view.settings.appearance.appearance.sort_favorite_by_date')
+ }}
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('view.favorite.worlds.vrchat_favorites') }}
+
+
+
+
+
+ {{ group.visibility.charAt(0).toUpperCase() + group.visibility.slice(1) }}
+ {{ group.count }}/{{ group.capacity }}
+
+
+
+
+
+ {{ visibility.charAt(0).toUpperCase() + visibility.slice(1) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No Data
+
+
+
+
{{ $t('view.favorite.worlds.local_favorites') }}
+
+
{{
+ $t('view.favorite.worlds.new_group')
+ }}
+
{{ $t('view.favorite.worlds.refresh') }}
+
+
+ {{ $t('view.favorite.worlds.cancel_refresh') }}
+
+
+
+
+
+ {{
+ getLocalWorldFavoriteGroupLength(group)
+ }}
+
+
+
+
+
+
+
+
+
+
+
+ No Data
+
+
+
+
+
+
+
+
+
diff --git a/src/components/sidebar/FriendsSidebar.vue b/src/components/sidebar/FriendsSidebar.vue
index ea419bb6..25e5035a 100644
--- a/src/components/sidebar/FriendsSidebar.vue
+++ b/src/components/sidebar/FriendsSidebar.vue
@@ -318,9 +318,7 @@
}
},
created() {
- configRepository.getBool('VRCX_sidebarGroupByInstanceCollapsed', false).then((value) => {
- this.isSidebarGroupByInstanceCollapsed = value;
- });
+ this.loadFriendsGroupStates();
},
methods: {
saveFriendsGroupStates() {
@@ -336,6 +334,10 @@
this.isOnlineFriends = await configRepository.getBool('VRCX_isFriendsGroupOnline', true);
this.isActiveFriends = await configRepository.getBool('VRCX_isFriendsGroupActive', false);
this.isOfflineFriends = await configRepository.getBool('VRCX_isFriendsGroupOffline', false);
+ this.isSidebarGroupByInstanceCollapsed = await configRepository.getBool(
+ 'VRCX_sidebarGroupByInstanceCollapsed',
+ false
+ );
},
isRealInstance(locationTag) {
return utils.isRealInstance(locationTag);
diff --git a/src/mixins/dialogs/previousInstances.pug b/src/mixins/dialogs/previousInstances.pug
index c0a870f9..7997fd0c 100644
--- a/src/mixins/dialogs/previousInstances.pug
+++ b/src/mixins/dialogs/previousInstances.pug
@@ -123,7 +123,7 @@ mixin previousInstances
size='mini'
@click='deleteGameLogWorldInstancePrompt(scope.row)')
-previous-instance-info(
+previous-instance-info-dialog(
:visible.sync='previousInstanceInfoDialogVisible'
:instance-id='previousInstanceInfoDialogInstanceId'
:game-log-is-friend='gameLogIsFriend'
diff --git a/src/mixins/dialogs/worldDialog.pug b/src/mixins/dialogs/worldDialog.pug
index 2f3c201a..605bed31 100644
--- a/src/mixins/dialogs/worldDialog.pug
+++ b/src/mixins/dialogs/worldDialog.pug
@@ -1,453 +1,20 @@
mixin worldDialog
- el-dialog.x-dialog.x-world-dialog(
- :before-close='beforeDialogClose'
- @mousedown.native='dialogMouseDown'
- @mouseup.native='dialogMouseUp'
- ref='worldDialog'
- :visible.sync='worldDialog.visible'
- :show-close='false'
- width='770px')
- div(v-loading='worldDialog.loading')
- div(style='display: flex')
- el-popover(placement='right' width='500px' trigger='click')
- img.x-link(
- slot='reference'
- v-lazy='worldDialog.ref.thumbnailImageUrl'
- style='flex: none; width: 160px; height: 120px; border-radius: 12px')
- img.x-link(
- v-lazy='worldDialog.ref.imageUrl'
- style='width: 500px; height: 375px'
- @click='showFullscreenImageDialog(worldDialog.ref.imageUrl)')
- div(style='flex: 1; display: flex; align-items: center; margin-left: 15px')
- div(style='flex: 1')
- div
- i.el-icon-s-home(
- v-show='API.currentUser.$homeLocation && API.currentUser.$homeLocation.worldId === worldDialog.id'
- style='margin-right: 5px')
- span.dialog-title(v-text='worldDialog.ref.name')
- div(style='margin-top: 5px')
- span.x-link.x-grey(
- v-text='worldDialog.ref.authorName'
- @click='showUserDialog(worldDialog.ref.authorId)'
- style='font-family: monospace')
- div
- el-tag(
- v-if='worldDialog.ref.$isLabs'
- type='primary'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.labs') }}
- el-tag(
- v-else-if='worldDialog.ref.releaseStatus === "public"'
- type='success'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.public') }}
- el-tag(
- v-else
- type='danger'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.private') }}
- el-tag.x-tag-platform-pc(
- v-if='worldDialog.isPC'
- type='info'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') PC
- span.x-grey(
- v-if='worldDialog.bundleSizes["standalonewindows"]'
- style='margin-left: 5px; border-left: inherit; padding-left: 5px') {{ worldDialog.bundleSizes['standalonewindows'].fileSize }}
- el-tag.x-tag-platform-quest(
- v-if='worldDialog.isQuest'
- type='info'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') Android
- span.x-grey(
- v-if='worldDialog.bundleSizes["android"]'
- style='margin-left: 5px; border-left: inherit; padding-left: 5px') {{ worldDialog.bundleSizes['android'].fileSize }}
- el-tag.x-tag-platform-ios(
- v-if='worldDialog.isIos'
- type='info'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') iOS
- span.x-grey(
- v-if='worldDialog.bundleSizes["ios"]'
- style='margin-left: 5px; border-left: inherit; padding-left: 5px') {{ worldDialog.bundleSizes['ios'].fileSize }}
- el-tag(
- v-if='worldDialog.avatarScalingDisabled'
- type='warning'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.avatar_scaling_disabled') }}
- el-tag(
- v-if='worldDialog.focusViewDisabled'
- type='warning'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.focus_view_disabled') }}
- el-tag(
- v-if='worldDialog.stickersDisabled'
- type='warning'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.stickers_disabled') }}
- el-tag(
- v-if='worldDialog.ref.unityPackageUrl'
- type='success'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.world.tags.future_proofing') }}
- el-tag.x-link(
- v-if='worldDialog.inCache'
- type='info'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px'
- @click='openFolderGeneric(worldDialog.cachePath)')
- span(v-text='worldDialog.cacheSize')
- | {{ $t('dialog.world.tags.cache') }}
- div
- template(v-for='tag in worldDialog.ref.tags')
- el-tag(
- v-if='tag.startsWith("content_")'
- :key='tag'
- effect='plain'
- size='mini'
- style='margin-right: 5px; margin-top: 5px')
- template(v-if='tag === "content_horror"') {{ $t('dialog.world.tags.content_horror') }}
- template(v-else-if='tag === "content_gore"') {{ $t('dialog.world.tags.content_gore') }}
- template(v-else-if='tag === "content_violence"') {{ $t('dialog.world.tags.content_violence') }}
- template(v-else-if='tag === "content_adult"') {{ $t('dialog.world.tags.content_adult') }}
- template(v-else-if='tag === "content_sex"') {{ $t('dialog.world.tags.content_sex') }}
- template(v-else) {{ tag.replace('content_', '') }}
- div(style='margin-top: 5px')
- span(
- v-show='worldDialog.ref.name !== worldDialog.ref.description'
- v-text='worldDialog.ref.description'
- style='font-size: 12px')
- div(style='flex: none; margin-left: 10px')
- el-tooltip(
- v-if='worldDialog.inCache'
- placement='top'
- :content='$t("dialog.world.actions.delete_cache_tooltip")'
- :disabled='hideTooltips')
- el-button(
- icon='el-icon-delete'
- circle
- @click='deleteVRChatCache(worldDialog.ref)'
- :disabled='isGameRunning && worldDialog.cacheLocked')
- el-tooltip(
- v-if='worldDialog.isFavorite'
- placement='top'
- :content='$t("dialog.world.actions.favorites_tooltip")'
- :disabled='hideTooltips')
- el-button(
- type='default'
- icon='el-icon-star-on'
- circle
- @click='worldDialogCommand("Add Favorite")'
- style='margin-left: 5px')
- el-tooltip(
- v-else
- placement='top'
- :content='$t("dialog.world.actions.favorites_tooltip")'
- :disabled='hideTooltips')
- el-button(
- type='default'
- icon='el-icon-star-off'
- circle
- @click='worldDialogCommand("Add Favorite")'
- style='margin-left: 5px')
- el-dropdown(
- trigger='click'
- @command='worldDialogCommand'
- size='small'
- style='margin-left: 5px')
- el-button(type='default' icon='el-icon-more' circle)
- el-dropdown-menu(#default='dropdown')
- el-dropdown-item(icon='el-icon-refresh' command='Refresh') {{ $t('dialog.world.actions.refresh') }}
- el-dropdown-item(icon='el-icon-share' command='Share') {{ $t('dialog.world.actions.share') }}
- el-dropdown-item(icon='el-icon-s-flag' command='New Instance' divided) {{ $t('dialog.world.actions.new_instance') }}
- el-dropdown-item(icon='el-icon-message' command='New Instance and Self Invite') {{ $t('dialog.world.actions.new_instance_and_self_invite') }}
- el-dropdown-item(
- v-if='API.currentUser.$homeLocation && API.currentUser.$homeLocation.worldId === worldDialog.id'
- icon='el-icon-magic-stick'
- command='Reset Home'
- divided) {{ $t('dialog.world.actions.reset_home') }}
- el-dropdown-item(v-else icon='el-icon-s-home' command='Make Home' divided) {{ $t('dialog.world.actions.make_home') }}
- el-dropdown-item(icon='el-icon-tickets' command='Previous Instances') {{ $t('dialog.world.actions.show_previous_instances') }}
- template(v-if='API.currentUser.id !== worldDialog.ref.authorId')
- el-dropdown-item(icon='el-icon-picture-outline' command='Previous Images') {{ $t('dialog.world.actions.show_previous_images') }}
- el-dropdown-item(
- :disabled='!worldDialog.hasPersistData'
- icon='el-icon-upload'
- command='Delete Persistent Data') {{ $t('dialog.world.actions.delete_persistent_data') }}
- template(v-else)
- el-dropdown-item(icon='el-icon-edit' command='Rename') {{ $t('dialog.world.actions.rename') }}
- el-dropdown-item(icon='el-icon-edit' command='Change Description') {{ $t('dialog.world.actions.change_description') }}
- el-dropdown-item(icon='el-icon-edit' command='Change Capacity') {{ $t('dialog.world.actions.change_capacity') }}
- el-dropdown-item(icon='el-icon-edit' command='Change Recommended Capacity') {{ $t('dialog.world.actions.change_recommended_capacity') }}
- el-dropdown-item(icon='el-icon-edit' command='Change YouTube Preview') {{ $t('dialog.world.actions.change_preview') }}
- el-dropdown-item(icon='el-icon-edit' command='Change Tags') {{ $t('dialog.world.actions.change_tags') }}
- el-dropdown-item(icon='el-icon-edit' command='Change Allowed Domains') {{ $t('dialog.world.actions.change_allowed_video_player_domains') }}
- el-dropdown-item(icon='el-icon-picture-outline' command='Change Image') {{ $t('dialog.world.actions.change_image') }}
- el-dropdown-item(
- v-if='worldDialog.ref.unityPackageUrl'
- icon='el-icon-download'
- command='Download Unity Package') {{ $t('dialog.world.actions.download_package') }}
- el-dropdown-item(
- v-if='worldDialog.ref.tags.includes("system_approved") || worldDialog.ref.tags.includes("system_labs")'
- icon='el-icon-view'
- command='Unpublish'
- divided) {{ $t('dialog.world.actions.unpublish') }}
- el-dropdown-item(v-else icon='el-icon-view' command='Publish' divided) {{ $t('dialog.world.actions.publish_to_labs') }}
- el-dropdown-item(
- :disabled='!worldDialog.hasPersistData'
- icon='el-icon-upload'
- command='Delete Persistent Data') {{ $t('dialog.world.actions.delete_persistent_data') }}
- el-dropdown-item(icon='el-icon-delete' command='Delete' style='color: #f56c6c') {{ $t('dialog.world.actions.delete') }}
- el-tabs
- el-tab-pane(:label='$t("dialog.world.instances.header")')
- div.
- #[i.el-icon-user] {{ $t('dialog.world.instances.public_count', { count: worldDialog.ref.publicOccupants }) }}
- #[i.el-icon-user-solid(style='margin-left: 10px')] {{ $t('dialog.world.instances.private_count', { count: worldDialog.ref.privateOccupants }) }}
- #[i.el-icon-check(style='margin-left: 10px')] {{ $t('dialog.world.instances.capacity_count', { count: worldDialog.ref.recommendedCapacity, max: worldDialog.ref.capacity }) }}
- div(v-for='room in worldDialog.rooms' :key='room.id')
- div(style='margin: 5px 0')
- location-world(
- :locationobject='room.$location'
- :currentuserid='API.currentUser.id'
- :worlddialogshortname='worldDialog.$location.shortName'
- @show-launch-dialog='showLaunchDialog')
- launch(
- :location='room.tag'
- @show-launch-dialog='showLaunchDialog'
- style='margin-left: 5px')
- 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')
- 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)
- el-tooltip(
- v-if='instanceJoinHistory.get(room.$location.tag)'
- placement='top'
- :content='$t("dialog.previous_instances.info")'
- :disabled='hideTooltips')
- el-button(
- @click='showPreviousInstanceInfoDialog(room.location)'
- size='mini'
- icon='el-icon-s-data'
- style='margin-left: 5px'
- plain
- circle)
- last-join(:location='room.$location.tag' :currentlocation='lastLocation.location')
- instance-info(
- :location='room.tag'
- :instance='room.ref'
- :friendcount='room.friendCount'
- :updateelement='updateInstanceInfo')
- .x-friend-list(
- style='margin: 10px 0; max-height: unset'
- v-if='room.$location.userId || room.users.length')
- .x-friend-item.x-friend-item-border(
- v-if='room.$location.userId'
- @click='showUserDialog(room.$location.userId)')
- template(v-if='room.$location.user')
- .avatar(:class='userStatusClass(room.$location.user)')
- img(v-lazy='userImage(room.$location.user)')
- .detail
- span.name(
- v-text='room.$location.user.displayName'
- :style='{ color: room.$location.user.$userColour }')
- span.extra {{ $t('dialog.world.instances.instance_creator') }}
- span(v-else v-text='room.$location.userId')
- .x-friend-item.x-friend-item-border(
- v-for='user in room.users'
- :key='user.id'
- @click='showUserDialog(user.id)')
- .avatar(:class='userStatusClass(user)')
- img(v-lazy='userImage(user)')
- .detail
- span.name(v-text='user.displayName' :style='{ color: user.$userColour }')
- span.extra(v-if='user.location === "traveling"')
- i.el-icon-loading(style='margin-right: 5px')
- timer(:epoch='user.$travelingToTime')
- span.extra(v-else)
- timer(:epoch='user.$location_at')
- el-tab-pane(:label='$t("dialog.world.info.header")' lazy)
- .x-friend-list(style='max-height: none')
- .x-friend-item(style='width: 100%; cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.memo') }}
- el-input.extra(
- v-model='worldDialog.memo'
- @change='onWorldMemoChange'
- type='textarea'
- :rows='2'
- :autosize='{ minRows: 1, maxRows: 20 }'
- :placeholder='$t("dialog.world.info.memo_placeholder")'
- size='mini'
- resize='none')
- div(style='width: 100%; display: flex')
- .x-friend-item(style='width: 100%; cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.id') }}
- span.extra {{ worldDialog.id }}
- el-tooltip(
- placement='top'
- :content='$t("dialog.world.info.id_tooltip")'
- :disabled='hideTooltips')
- el-dropdown(
- trigger='click'
- @click.native.stop
- size='mini'
- style='margin-left: 5px')
- el-button(type='default' icon='el-icon-s-order' size='mini' circle)
- el-dropdown-menu(#default='dropdown')
- el-dropdown-item(@click.native='copyWorldId(worldDialog.id)') {{ $t('dialog.world.info.copy_id') }}
- el-dropdown-item(@click.native='copyWorldUrl(worldDialog.id)') {{ $t('dialog.world.info.copy_url') }}
- el-dropdown-item(
- @click.native='copyWorldName(worldDialog.ref.name)') {{ $t('dialog.world.info.copy_name') }}
- .x-friend-item(
- v-if='worldDialog.ref.previewYoutubeId'
- style='width: 350px'
- @click='openExternalLink(`https://www.youtube.com/watch?v=${worldDialog.ref.previewYoutubeId}`)')
- .detail
- span.name {{ $t('dialog.world.info.youtube_preview') }}
- span.extra https://www.youtube.com/watch?v={{ worldDialog.ref.previewYoutubeId }}
- .x-friend-item(style='width: 100%; cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.author_tags') }}
- span.extra(
- v-if='worldDialog.ref.tags?.filter((tag) => tag.startsWith("author_tag")).length > 0') {{ worldDialog.ref.tags.filter((tag) => tag.startsWith('author_tag')).map((tag) => tag.replace('author_tag_', '')).join(', ') }}
- span.extra(v-else) -
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.players') }}
- span.extra {{ worldDialog.ref.occupants | commaNumber }}
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.favorites') }}
- span.extra {{ worldDialog.ref.favorites | commaNumber }}
- | #[span.extra(v-if='worldDialog.ref.favorites > 0 && worldDialog.ref.visits > 0') ({{ Math.round((((worldDialog.ref.favorites - worldDialog.ref.visits) / worldDialog.ref.visits) * 100 + 100) * 100) / 100 }}%)]
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.visits') }}
- span.extra {{ worldDialog.ref.visits | commaNumber }}
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.capacity') }}
- span.extra {{ worldDialog.ref.recommendedCapacity | commaNumber }} ({{ worldDialog.ref.capacity | commaNumber }})
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.created_at') }}
- span.extra {{ worldDialog.ref.created_at | formatDate('long') }}
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.last_updated') }}
- span.extra(v-if='worldDialog.lastUpdated') {{ worldDialog.lastUpdated | formatDate('long') }}
- span.extra(v-else) {{ worldDialog.ref.updated_at | formatDate('long') }}
- .x-friend-item(v-if='worldDialog.ref.labsPublicationDate !== "none"' style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.labs_publication_date') }}
- span.extra {{ worldDialog.ref.labsPublicationDate | formatDate('long') }}
- .x-friend-item(v-if='worldDialog.ref.publicationDate !== "none"' style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.publication_date') }}
- el-tooltip(
- v-if='worldDialog.ref.publicationDate && worldDialog.ref.publicationDate !== "none" && worldDialog.ref.labsPublicationDate && worldDialog.ref.labsPublicationDate !== "none"'
- placement='top'
- style='margin-left: 5px')
- template(#content)
- span {{ $t('dialog.world.info.time_in_labs') }} {{ timeToText(new Date(worldDialog.ref.publicationDate) - new Date(worldDialog.ref.labsPublicationDate)) }}
- i.el-icon-arrow-down
- span.extra {{ worldDialog.ref.publicationDate | formatDate('long') }}
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.version') }}
- span.extra(v-text='worldDialog.ref.version')
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.heat') }}
- span.extra {{ worldDialog.ref.heat | commaNumber }} {{ '🔥'.repeat(worldDialog.ref.heat) }}
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.popularity') }}
- span.extra {{ worldDialog.ref.popularity | commaNumber }} {{ '💖'.repeat(worldDialog.ref.popularity) }}
- .x-friend-item(style='width: 100%; cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.platform') }}
- span.extra(v-text='worldDialogPlatform')
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.last_visited') }}
- el-tooltip(
- v-if='!hideTooltips'
- placement='top'
- style='margin-left: 5px'
- :content='$t("dialog.world.info.accuracy_notice")')
- i.el-icon-warning
- span.extra {{ worldDialog.lastVisit | formatDate('long') }}
- el-tooltip(
- :disabled='hideTooltips'
- placement='top'
- :content='$t("dialog.user.info.open_previouse_instance")')
- .x-friend-item(@click='showPreviousInstancesWorldDialog(worldDialog.ref)')
- .detail
- span.name {{ $t('dialog.world.info.visit_count') }}
- el-tooltip(
- v-if='!hideTooltips'
- placement='top'
- style='margin-left: 5px'
- :content='$t("dialog.world.info.accuracy_notice")')
- i.el-icon-warning
- span.extra(v-text='worldDialog.visitCount')
- .x-friend-item(style='cursor: default')
- .detail
- span.name {{ $t('dialog.world.info.time_spent') }}
- el-tooltip(
- v-if='!hideTooltips'
- placement='top'
- style='margin-left: 5px'
- :content='$t("dialog.world.info.accuracy_notice")')
- i.el-icon-warning
- span.extra(v-if='worldDialog.timeSpent === 0') -
- span.extra(v-else) {{ timeToText(worldDialog.timeSpent) }}
- el-tab-pane(:label='$t("dialog.world.json.header")' lazy)
- el-button(
- type='default'
- @click='refreshWorldDialogTreeData()'
- size='mini'
- icon='el-icon-refresh'
- circle)
- el-button(
- type='default'
- @click='downloadAndSaveJson(worldDialog.id, worldDialog.ref)'
- size='mini'
- icon='el-icon-download'
- circle
- style='margin-left: 5px')
- el-tree(:data='worldDialog.treeData' style='margin-top: 5px; font-size: 12px')
- template(#default='scope')
- span
- span(v-text='scope.data.key' style='font-weight: bold; margin-right: 5px')
- span(v-if='!scope.data.children' v-text='scope.data.value')
+ world-dialog(
+ :world-dialog='worldDialog'
+ :hide-tooltips='hideTooltips'
+ :is-game-running='isGameRunning'
+ :last-location='lastLocation'
+ :instance-join-history='instanceJoinHistory'
+ :update-instance-info='updateInstanceInfo'
+ @show-fullscreen-image-dialog='showFullscreenImageDialog'
+ @open-folder-generic='openFolderGeneric'
+ @delete-vrchat-cache='deleteVRChatCache'
+ @world-dialog-command='worldDialogCommand'
+ @show-launch-dialog='showLaunchDialog'
+ @refresh-instance-player-count='refreshInstancePlayerCount'
+ @show-previous-instance-info-dialog='showPreviousInstanceInfoDialog'
+ @show-previous-instances-world-dialog='showPreviousInstancesWorldDialog'
+ @download-and-save-json='downloadAndSaveJson')
//- dialog: change Allowed Video Player Domains
el-dialog.x-dialog(
diff --git a/src/mixins/tabs/favorites.pug b/src/mixins/tabs/favorites.pug
index 04a4469c..0ce4ecf2 100644
--- a/src/mixins/tabs/favorites.pug
+++ b/src/mixins/tabs/favorites.pug
@@ -16,7 +16,7 @@ mixin favoritesTab
size='small'
icon='el-icon-refresh'
circle)
- el-tabs(type='card' v-loading='API.isFavoriteLoading' style='height: 100%' @tab-click='onFavTabClick')
+ el-tabs(type='card' v-loading='API.isFavoriteLoading' style='height: 100%')
el-tab-pane(:label='$t("view.favorite.friends.header")' lazy)
div(style='display: flex; align-items: center; justify-content: space-between')
div
@@ -132,302 +132,28 @@ mixin favoritesTab
style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
span No Data
el-tab-pane(:label='$t("view.favorite.worlds.header")' lazy)
- div(style='display: flex; align-items: center; justify-content: space-between')
- div
- el-button(size='small' @click='showWorldExportDialog') {{ $t('view.favorite.export') }}
- el-button(size='small' @click='showWorldImportDialog' style='margin-left: 5px') {{ $t('view.favorite.import') }}
- div(style='display: flex; align-items: center; font-size: 13px; margin-right: 10px')
- span.name(style='margin-right: 5px; line-height: 10px') {{ $t('view.favorite.sort_by') }}
- el-radio-group(
- v-model='sortFavorites'
- @change='saveSortFavoritesOption'
- style='margin-right: 12px')
- el-radio(:label='false') {{ $t('view.settings.appearance.appearance.sort_favorite_by_name') }}
- el-radio(:label='true') {{ $t('view.settings.appearance.appearance.sort_favorite_by_date') }}
- el-input(
- v-model='worldFavoriteSearch'
- @input='searchWorldFavorites'
- clearable
- size='mini'
- :placeholder='$t("view.favorite.worlds.search")'
- style='width: 200px')
- .x-friend-list(style='margin-top: 10px')
- div(
- style='display: inline-block; width: 300px; margin-right: 15px'
- v-for='favorite in worldFavoriteSearchResults'
- :key='favorite.id'
- @click='showWorldDialog(favorite.id)')
- .x-friend-item
- template(v-if='favorite.name')
- .avatar
- img(v-lazy='favorite.thumbnailImageUrl')
- .detail
- span.name(v-text='favorite.name')
- span.extra(v-if='favorite.occupants') {{ favorite.authorName }} ({{ favorite.occupants }})
- span.extra(v-else v-text='favorite.authorName')
- template(v-else)
- .avatar
- .detail
- span(v-text='favorite.id')
- span(style='display: block; margin-top: 20px') {{ $t('view.favorite.worlds.vrchat_favorites') }}
- el-collapse(style='border: 0')
- el-collapse-item(v-for='group in API.favoriteWorldGroups' :key='group.name')
- template(slot='title')
- div(style='display: flex; align-items: center')
- span(
- v-text='group.displayName'
- style='font-weight: bold; font-size: 14px; margin-left: 10px')
- el-tag(
- style='margin: 1px 0 0 5px'
- size='mini'
- :type='userFavoriteWorldsStatusForFavTab(group.visibility)'
- effect='plain') {{ group.visibility.charAt(0).toUpperCase() + group.visibility.slice(1) }}
- span(style='color: #909399; font-size: 12px; margin-left: 10px') {{ group.count }}/{{ group.capacity }}
- el-dropdown(trigger='click' @click.native.stop size='mini' style='margin-left: 10px')
- el-tooltip(
- placement='top'
- :content='$t("view.favorite.visibility_tooltip")'
- :disabled='hideTooltips')
- el-button(type='default' icon='el-icon-view' size='mini' circle)
- el-dropdown-menu(#default='dropdown')
- el-dropdown-item(
- v-if='group.visibility !== visibility'
- v-for='visibility in worldGroupVisibilityOptions'
- :key='visibility'
- style='display: block; margin: 10px 0'
- v-text='visibility.charAt(0).toUpperCase() + visibility.slice(1)'
- @click.native='changeWorldGroupVisibility(group.name, visibility)')
- el-tooltip(
- placement='top'
- :content='$t("view.favorite.rename_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='changeFavoriteGroupName(group)'
- size='mini'
- icon='el-icon-edit'
- circle
- style='margin-left: 5px')
- el-tooltip(
- placement='right'
- :content='$t("view.favorite.clear_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='clearFavoriteGroup(group)'
- size='mini'
- icon='el-icon-delete'
- circle
- style='margin-left: 5px')
- .x-friend-list(v-if='group.count' style='margin-top: 10px')
- div(
- style='display: inline-block; width: 300px; margin-right: 15px'
- v-for='favorite in groupedByGroupKeyFavoriteWorlds[group.key]'
- :key='favorite.id'
- @click='showWorldDialog(favorite.id)')
- .x-friend-item
- template(v-if='favorite.ref')
- .avatar
- img(v-lazy='favorite.ref.thumbnailImageUrl')
- .detail
- span.name(v-text='favorite.ref.name')
- span.extra(v-if='favorite.ref.occupants') {{ favorite.ref.authorName }} ({{ favorite.ref.occupants }})
- span.extra(v-else v-text='favorite.ref.authorName')
- template(v-if='editFavoritesMode')
- el-dropdown(
- trigger='click'
- @click.native.stop
- size='mini'
- style='margin-left: 5px')
- el-tooltip(
- placement='left'
- :content='$t("view.favorite.move_tooltip")'
- :disabled='hideTooltips')
- el-button(type='default' icon='el-icon-back' size='mini' circle)
- el-dropdown-menu(#default='dropdown')
- template(
- v-if='groupAPI.name !== group.name'
- v-for='groupAPI in API.favoriteWorldGroups')
- el-dropdown-item(
- :key='groupAPI.name'
- style='display: block; margin: 10px 0'
- @click.native='moveFavorite(favorite.ref, groupAPI, "world")'
- :disabled='groupAPI.count >= groupAPI.capacity') {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }})
- el-button(type='text' size='mini' @click.stop style='margin-left: 5px')
- el-checkbox(v-model='favorite.$selected')
- template(v-else)
- el-tooltip(
- v-if='favorite.deleted'
- placement='left'
- :content='$t("view.favorite.unavailable_tooltip")')
- i.el-icon-warning(style='color: #f56c6c; margin-left: 5px')
- el-tooltip(
- v-if='favorite.ref.releaseStatus === "private"'
- placement='left'
- :content='$t("view.favorite.private")')
- i.el-icon-warning(style='color: #e6a23c; margin-left: 5px')
- el-tooltip(
- placement='left'
- :content='$t("view.favorite.self_invite_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='newInstanceSelfInvite(favorite.id)'
- size='mini'
- icon='el-icon-message'
- circle
- style='margin-left: 5px')
- el-tooltip(
- placement='right'
- :content='$t("view.favorite.unfavorite_tooltip")'
- :disabled='hideTooltips')
- el-button(
- v-if='shiftHeld'
- @click.stop='deleteFavorite(favorite.id)'
- size='mini'
- icon='el-icon-close'
- circle
- style='color: #f56c6c; margin-left: 5px')
- el-button(
- v-else
- @click.stop='showFavoriteDialog("world", favorite.id)'
- type='default'
- icon='el-icon-star-on'
- size='mini'
- circle
- style='margin-left: 5px')
- template(v-else)
- .avatar
- .detail
- span(v-text='favorite.name || favorite.id')
- el-tooltip(
- v-if='favorite.deleted'
- placement='left'
- :content='$t("view.favorite.unavailable_tooltip")')
- i.el-icon-warning(style='color: #f56c6c; margin-left: 5px')
- el-button(
- type='text'
- icon='el-icon-close'
- size='mini'
- @click.stop='deleteFavorite(favorite.id)'
- style='margin-left: 5px')
- div(
- v-else
- style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
- span No Data
- span(style='display: block; margin-top: 20px') {{ $t('view.favorite.worlds.local_favorites') }}
- br
- el-button(size='small' @click='promptNewLocalWorldFavoriteGroup') {{ $t('view.favorite.worlds.new_group') }}
- el-button(
- v-if='!refreshingLocalFavorites'
- size='small'
- @click='refreshLocalWorldFavorites'
- style='margin-left: 5px') {{ $t('view.favorite.worlds.refresh') }}
- el-button(v-else size='small' @click='refreshingLocalFavorites = false' style='margin-left: 5px')
- i.el-icon-loading(style='margin-right: 5px')
- span {{ $t('view.favorite.worlds.cancel_refresh') }}
- el-collapse-item(
- v-for='group in localWorldFavoriteGroups'
- v-if='localWorldFavorites[group]'
- :key='group')
- template(slot='title')
- span(v-text='group' style='font-weight: bold; font-size: 14px; margin-left: 10px')
- span(style='color: #909399; font-size: 12px; margin-left: 10px') {{ getLocalWorldFavoriteGroupLength(group) }}
- el-tooltip(
- placement='top'
- :content='$t("view.favorite.rename_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='promptLocalWorldFavoriteGroupRename(group)'
- size='mini'
- icon='el-icon-edit'
- circle
- style='margin-left: 10px')
- el-tooltip(
- placement='right'
- :content='$t("view.favorite.delete_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='promptLocalWorldFavoriteGroupDelete(group)'
- size='mini'
- icon='el-icon-delete'
- circle
- style='margin-left: 5px')
- .x-friend-list(
- style='margin-top: 10px'
- v-if='localFavoriteShowDelayedContent[0] && localWorldFavorites[group].length')
- div(
- style='display: inline-block; width: 300px; margin-right: 15px'
- v-for='favorite in localWorldFavorites[group]'
- :key='favorite.id'
- @click='showWorldDialog(favorite.id)')
- .x-friend-item
- template(v-if='favorite.name')
- .avatar
- img(v-lazy='favorite.thumbnailImageUrl')
- .detail
- span.name(v-text='favorite.name')
- span.extra(v-if='favorite.occupants') {{ favorite.authorName }} ({{ favorite.occupants }})
- span.extra(v-else v-text='favorite.authorName')
- template(v-if='editFavoritesMode')
- el-dropdown(
- trigger='click'
- @click.native.stop
- size='mini'
- style='margin-left: 5px')
- el-tooltip(
- placement='left'
- :content='$t("view.favorite.copy_tooltip")'
- :disabled='hideTooltips')
- el-button(type='default' icon='el-icon-back' size='mini' circle)
- el-dropdown-menu(#default='dropdown')
- template(v-for='groupAPI in API.favoriteWorldGroups')
- el-dropdown-item(
- :key='groupAPI.name'
- style='display: block; margin: 10px 0'
- @click.native='addFavoriteWorld(favorite, groupAPI, true)'
- :disabled='groupAPI.count >= groupAPI.capacity') {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }})
- template(v-else)
- el-tooltip(
- placement='left'
- :content='$t("view.favorite.self_invite_tooltip")'
- :disabled='hideTooltips')
- el-button(
- @click.stop='newInstanceSelfInvite(favorite.id)'
- size='mini'
- icon='el-icon-message'
- circle
- style='margin-left: 5px')
- el-tooltip(
- placement='right'
- :content='$t("view.favorite.unfavorite_tooltip")'
- :disabled='hideTooltips')
- el-button(
- v-if='shiftHeld'
- @click.stop='removeLocalWorldFavorite(favorite.id, group)'
- size='mini'
- icon='el-icon-close'
- circle
- style='color: #f56c6c; margin-left: 5px')
- el-button(
- v-else
- @click.stop='showFavoriteDialog("world", favorite.id)'
- type='default'
- icon='el-icon-star-on'
- size='mini'
- circle
- style='margin-left: 5px')
- template(v-else)
- .avatar
- .detail
- span(v-text='favorite.id')
- el-button(
- type='text'
- icon='el-icon-close'
- size='mini'
- @click.stop='removeLocalWorldFavorite(favorite.id, group)'
- style='margin-left: 5px')
- div(
- v-else
- style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
- span No Data
+ favorites-world-tab(
+ @show-world-export-dialog='showWorldExportDialog'
+ @show-world-import-dialog='showWorldImportDialog'
+ @save-sort-favorites-option='saveSortFavoritesOption'
+ @show-world-dialog='showWorldDialog'
+ @change-favorite-group-name='changeFavoriteGroupName'
+ @clear-favorite-group='clearFavoriteGroup'
+ @new-instance-self-invite='newInstanceSelfInvite'
+ @show-favorite-dialog='showFavoriteDialog'
+ @refresh-local-world-favorite='refreshLocalWorldFavorites'
+ @delete-local-world-favorite-group='deleteLocalWorldFavoriteGroup'
+ @search-world-favorites='searchWorldFavorites'
+ @remove-local-world-favorite='removeLocalWorldFavorite'
+ :sort-favorites.sync='sortFavorites'
+ :world-favorite-search-results='worldFavoriteSearchResults'
+ :hide-tooltips='hideTooltips'
+ :favorite-worlds='favoriteWorlds'
+ :edit-favorites-mode='editFavoritesMode'
+ :shift-held='shiftHeld'
+ :refresh-local-world-favorites='refreshLocalWorldFavorites'
+ :local-world-favorite-groups='localWorldFavoriteGroups'
+ :local-world-favorites='localWorldFavorites')
el-tab-pane(:label='$t("view.favorite.avatars.header")' lazy)
div(style='display: flex; align-items: center; justify-content: space-between')
div
@@ -681,9 +407,7 @@ mixin favoritesTab
icon='el-icon-delete'
circle
style='margin-left: 5px')
- .x-friend-list(
- style='margin-top: 10px'
- v-if='localFavoriteShowDelayedContent[1] && localAvatarFavorites[group].length')
+ .x-friend-list(style='margin-top: 10px' v-if='localAvatarFavorites[group].length')
div(
style='display: inline-block; width: 300px; margin-right: 15px'
v-for='favorite in localAvatarFavorites[group]'
diff --git a/src/mixins/tabs/notifications.pug b/src/mixins/tabs/notifications.pug
index a05ea4ec..443ecf77 100644
--- a/src/mixins/tabs/notifications.pug
+++ b/src/mixins/tabs/notifications.pug
@@ -105,7 +105,7 @@ mixin notificationsTab
@click='showFullscreenImageDialog(scope.row.imageUrl)')
el-table-column(:label='$t("table.notification.message")' prop='message')
template(#default='scope')
- span.x-link(v-if='scope.row.type === "invite"')
+ span.x-link(v-if='scope.row.type === "invite"' style='display: flex')
location(
v-if='scope.row.details'
:location='scope.row.details.worldId'
diff --git a/src/views/SideBar.vue b/src/views/SideBar.vue
index 834997f1..33f814b7 100644
--- a/src/views/SideBar.vue
+++ b/src/views/SideBar.vue
@@ -146,7 +146,3 @@
}
};
-
-
diff --git a/src/views/dialogs/PreviousInstanceInfo.vue b/src/views/dialogs/PreviousInstanceInfoDialog.vue
similarity index 99%
rename from src/views/dialogs/PreviousInstanceInfo.vue
rename to src/views/dialogs/PreviousInstanceInfoDialog.vue
index cb9eedbc..c0834cc9 100644
--- a/src/views/dialogs/PreviousInstanceInfo.vue
+++ b/src/views/dialogs/PreviousInstanceInfoDialog.vue
@@ -64,7 +64,7 @@
import Location from '../../components/common/Location.vue';
export default {
- name: 'PreviousInstanceInfo',
+ name: 'PreviousInstanceInfoDialog',
components: {
Location
},
diff --git a/src/views/dialogs/WorldDialog.vue b/src/views/dialogs/WorldDialog.vue
new file mode 100644
index 00000000..68e7b025
--- /dev/null
+++ b/src/views/dialogs/WorldDialog.vue
@@ -0,0 +1,931 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.tags.labs') }}
+
+
+ {{ $t('dialog.world.tags.public') }}
+
+
+ {{ $t('dialog.world.tags.private') }}
+
+
+ PC
+
+
+ {{ worldDialog.bundleSizes['standalonewindows'].fileSize }}
+
+
+ Android
+
+
+ {{ worldDialog.bundleSizes['android'].fileSize }}
+
+
+ iOS
+
+
+ {{ worldDialog.bundleSizes['ios'].fileSize }}
+
+
+ {{ $t('dialog.world.tags.avatar_scaling_disabled') }}
+
+
+ {{ $t('dialog.world.tags.focus_view_disabled') }}
+
+
+ {{ $t('dialog.world.tags.stickers_disabled') }}
+
+
+ {{ $t('dialog.world.tags.future_proofing') }}
+
+
+
+ | {{ $t('dialog.world.tags.cache') }}
+
+
+
+
+
+
+ {{ $t('dialog.world.tags.content_horror') }}
+
+
+ {{ $t('dialog.world.tags.content_gore') }}
+
+
+ {{ $t('dialog.world.tags.content_violence') }}
+
+
+ {{ $t('dialog.world.tags.content_adult') }}
+
+
+ {{ $t('dialog.world.tags.content_sex') }}
+
+
+ {{ tag.replace('content_', '') }}
+
+
+
+
+
+ {{ worldDialog.ref.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.actions.refresh') }}
+
+
+ {{ $t('dialog.world.actions.share') }}
+
+
+ {{ $t('dialog.world.actions.new_instance') }}
+
+
+ {{ $t('dialog.world.actions.new_instance_and_self_invite') }}
+
+
+ {{ $t('dialog.world.actions.reset_home') }}
+
+
+ {{ $t('dialog.world.actions.make_home') }}
+
+
+ {{ $t('dialog.world.actions.show_previous_instances') }}
+
+
+
+ {{ $t('dialog.world.actions.show_previous_images') }}
+
+
+ {{ $t('dialog.world.actions.delete_persistent_data') }}
+
+
+
+
+ {{ $t('dialog.world.actions.rename') }}
+
+
+ {{ $t('dialog.world.actions.change_description') }}
+
+
+ {{ $t('dialog.world.actions.change_capacity') }}
+
+
+ {{ $t('dialog.world.actions.change_recommended_capacity') }}
+
+
+ {{ $t('dialog.world.actions.change_preview') }}
+
+
+ {{ $t('dialog.world.actions.change_tags') }}
+
+
+ {{ $t('dialog.world.actions.change_allowed_video_player_domains') }}
+
+
+ {{ $t('dialog.world.actions.change_image') }}
+
+
+ {{ $t('dialog.world.actions.download_package') }}
+
+
+ {{ $t('dialog.world.actions.unpublish') }}
+
+
+ {{ $t('dialog.world.actions.publish_to_labs') }}
+
+
+ {{ $t('dialog.world.actions.delete_persistent_data') }}
+
+
+ {{ $t('dialog.world.actions.delete') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.instances.public_count', { count: worldDialog.ref.publicOccupants }) }}
+
+ {{ $t('dialog.world.instances.private_count', { count: worldDialog.ref.privateOccupants }) }}
+
+ {{
+ $t('dialog.world.instances.capacity_count', {
+ count: worldDialog.ref.recommendedCapacity,
+ max: worldDialog.ref.capacity
+ })
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.memo') }}
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.id') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.copy_id') }}
+
+
+ {{ $t('dialog.world.info.copy_url') }}
+
+
+ {{ $t('dialog.world.info.copy_name') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.youtube_preview') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.author_tags') }}
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.players') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.favorites') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.visits') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.capacity') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.created_at') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.last_updated') }}
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.labs_publication_date') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.publication_date') }}
+
+
+
+
+ {{ $t('dialog.world.info.time_in_labs') }}
+ {{ timeInLab }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.version') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.heat') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.popularity') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.platform') }}
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.last_visited') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.visit_count') }}
+
+
+
+
+
+
+
+
+ {{ $t('dialog.world.info.time_spent') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+