12/24 hour time option + locale date format

This commit is contained in:
Natsumi
2022-01-25 21:18:46 +13:00
parent 4201d55d65
commit 85373b9032
5 changed files with 191 additions and 123 deletions

View File

@@ -403,6 +403,11 @@ namespace VRCX
return output;
}
public string CurrentCulture()
{
return System.Globalization.CultureInfo.CurrentCulture.ToString();
}
public void SetStartup(bool enabled)
{
try

View File

@@ -172,7 +172,6 @@ speechSynthesis.getVoices();
(c) => map[c] || c
);
};
Vue.filter('formatDate', formatDate);
var textToHex = function (text) {
var s = String(text);
@@ -11476,7 +11475,8 @@ speechSynthesis.getVoices();
notificationPosition: this.notificationPosition,
notificationTimeout: this.notificationTimeout,
notificationTheme,
backgroundEnabled: this.vrBackgroundEnabled
backgroundEnabled: this.vrBackgroundEnabled,
dtHour12: this.dtHour12
};
var json = JSON.stringify(VRConfigVars);
AppApi.ExecuteVrFeedFunction('configUpdate', json);
@@ -18659,6 +18659,51 @@ speechSynthesis.getVoices();
});
};
$app.data.dtHour12 = configRepository.getBool('VRCX_dtHour12');
$app.methods.setDatetimeFormat = async function () {
var currentCulture = await AppApi.CurrentCulture();
var hour12 = configRepository.getBool('VRCX_dtHour12');
if (typeof this.dtHour12 !== 'undefined') {
if (hour12 !== this.dtHour12) {
configRepository.setBool('VRCX_dtHour12', this.dtHour12);
this.updateVRConfigVars();
}
var hour12 = this.dtHour12;
}
var formatDate1 = function (date, format) {
if (!date) {
return '-';
}
var dt = new Date(date);
if (format === 'long') {
return dt.toLocaleDateString(currentCulture, {
month: '2-digit',
day: '2-digit',
year: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12
});
} else if (format === 'short') {
return dt
.toLocaleDateString(currentCulture, {
month: '2-digit',
day: '2-digit',
hour: 'numeric',
minute: 'numeric',
hour12
})
.replace(' AM', 'am')
.replace(' PM', 'pm')
.replace(',', '');
}
return '-';
};
Vue.filter('formatDate', formatDate1);
};
$app.methods.setDatetimeFormat();
$app = new Vue($app);
window.$app = $app;
})();

View File

@@ -116,11 +116,11 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Last Updated
span.extra {{ currentInstanceWorld.updated_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ currentInstanceWorld.updated_at | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Created
span.extra {{ currentInstanceWorld.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ currentInstanceWorld.created_at | formatDate('long') }}
div.current-instance-table
data-tables(v-bind="currentInstanceUserList" @row-click="selectCurrentInstanceRow" style="margin-top:10px;cursor:pointer")
el-table-column(label="Avatar" width="60" prop="photo")
@@ -184,12 +184,12 @@ html
el-tabs(type="card")
el-tab-pane(label="Current")
data-tables(v-bind="photonEventTable" style="margin-bottom:10px")
el-table-column(label="Date" prop="created_at" width="90")
el-table-column(label="Date" prop="created_at" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Name" prop="photonId" width="160")
template(v-once #default="scope")
span.x-link(v-text="scope.row.displayName" @click="showUserFromPhotonId(scope.row.photonId)" style="padding-right:10px")
@@ -206,12 +206,12 @@ html
span(v-else v-text="scope.row.text")
el-tab-pane(label="Previous")
data-tables(v-bind="photonEventTablePrevious" style="margin-bottom:10px")
el-table-column(label="Date" prop="created_at" width="90")
el-table-column(label="Date" prop="created_at" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Name" prop="photonId" width="160")
template(v-once #default="scope")
span.x-link(v-text="scope.row.displayName" @click="lookupUser(scope.row)" style="padding-right:10px")
@@ -287,12 +287,12 @@ html
span(v-else) Offline
i.x-user-status(:class="statusClass(scope.row.status)")
span(v-text="scope.row.statusDescription")
el-table-column(label="Date" prop="created_at" sortable="custom" width="90")
el-table-column(label="Date" prop="created_at" sortable="custom" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Type" prop="type" width="70")
el-table-column(label="User" prop="displayName" width="180")
template(v-once #default="scope")
@@ -347,12 +347,12 @@ html
el-input(v-model="gameLogTable.search" placeholder="Search" @keyup.native.13="gameLogTableLookup" @change="gameLogTableLookup" clearable style="flex:none;width:150px;margin:0 10px")
//- el-tooltip(placement="bottom" content="Reload game log" :disabled="hideTooltips")
//- el-button(type="default" @click="resetGameLog" icon="el-icon-refresh" circle style="flex:none")
el-table-column(label="Date" prop="created_at" sortable="custom" width="90")
el-table-column(label="Date" prop="created_at" sortable="custom" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Type" prop="type" width="120")
template(v-once #default="scope")
span.x-link(v-if="scope.row.location && scope.row.type !== 'Location'" v-text="scope.row.type" @click="showWorldDialog(scope.row.location)")
@@ -546,12 +546,12 @@ html
el-select(v-model="friendLogTable.filters[0].value" @change="saveTableFilters" multiple clearable collapse-tags style="flex:1" placeholder="Filter")
el-option(v-once v-for="type in ['Friend', 'Unfriend', 'FriendRequest', 'CancelFriendRequest', 'DisplayName', 'TrustLevel']" :key="type" :label="type" :value="type")
el-input(v-model="friendLogTable.filters[1].value" placeholder="Search" style="flex:none;width:150px;margin-left:10px")
el-table-column(label="Date" prop="created_at" sortable="custom" width="100")
el-table-column(label="Date" prop="created_at" sortable="custom" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Type" prop="type" width="150")
el-table-column(label="User" prop="displayName")
template(v-once #default="scope")
@@ -574,12 +574,12 @@ html
el-input(v-model="playerModerationTable.filters[1].value" placeholder="Search" style="flex:none;width:150px;margin:0 10px")
el-tooltip(placement="bottom" content="Refresh" :disabled="hideTooltips")
el-button(type="default" :loading="API.isPlayerModerationsLoading" @click="API.refreshPlayerModerations()" icon="el-icon-refresh" circle style="flex:none")
el-table-column(label="Date" prop="created" sortable="custom" width="100")
el-table-column(label="Date" prop="created" sortable="custom" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created | formatDate('long') }}
span {{ scope.row.created | formatDate('short') }}
el-table-column(label="Type" prop="type" width="100")
el-table-column(label="Source" prop="sourceDisplayName")
template(v-once #default="scope")
@@ -601,12 +601,12 @@ html
el-input(v-model="notificationTable.filters[1].value" placeholder="Search" style="flex:none;width:150px;margin:0 10px")
el-tooltip(placement="bottom" content="Refresh" :disabled="hideTooltips")
el-button(type="default" :loading="API.isNotificationsLoading" @click="API.refreshNotifications()" icon="el-icon-refresh" circle style="flex:none")
el-table-column(label="Date" prop="created_at" sortable="custom" width="100")
el-table-column(label="Date" prop="created_at" sortable="custom" width="110")
template(v-once #default="scope")
el-tooltip(placement="right")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Type" prop="type" width="150")
template(v-once #default="scope")
el-tooltip(placement="top" v-if="scope.row.type === 'invite'")
@@ -665,7 +665,7 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Last Login
span.extra {{ API.currentUser.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span.extra {{ API.currentUser.last_login | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Two-Factor Auth (2FA)
@@ -765,7 +765,7 @@ html
data-tables(v-bind="pastDisplayNameTable" style="margin-top:10px")
el-table-column(label="Date" prop="updated_at" sortable="custom")
template(v-once #default="scope")
span {{ scope.row.updated_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.updated_at | formatDate('long') }}
el-table-column(label="Name" prop="displayName")
div.options-container
span.header Config JSON
@@ -850,7 +850,11 @@ html
template(v-once #default="scope")
span(v-if="scope.row.$timeSpent") {{ scope.row.$timeSpent | timeToText }}
el-table-column(label="Last Seen" width="170" prop="$lastSeen" sortable :sort-method="(a, b) => sortAlphabetically(a, b, '$lastSeen')")
template(v-once #default="scope")
span {{ scope.row.$timeSpent | formatDate('long') }}
el-table-column(label="Last Login" width="170" prop="last_login" sortable :sort-method="(a, b) => sortAlphabetically(a, b, 'last_login')")
template(v-once #default="scope")
span {{ scope.row.last_login | formatDate('long') }}
el-table-column(label="Date Joined" width="120" prop="date_joined" sortable :sort-method="(a, b) => sortAlphabetically(a, b, 'date_joined')")
el-table-column(label="Unfriend" width="70" align="right")
template(v-once #default="scope")
@@ -1130,6 +1134,9 @@ html
div.options-container-item
span.name Close to tray
el-switch(v-model="isCloseToTray")
div.options-container-item
span.name Time Format
el-switch(v-model="dtHour12" @change="setDatetimeFormat" inactive-text="24 Hour" active-text="12 Hour")
div.options-container-item
el-button-group
el-button(size="small" icon="el-icon-s-operation" @click="showLaunchOptions()") Launch Options
@@ -1461,7 +1468,7 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Last Seen
span.extra {{ userDialog.lastSeen | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ userDialog.lastSeen | formatDate('long') }}
.x-friend-item(@click="showPreviousInstancesUserDialog(userDialog.ref)")
.detail
span.name Join Count
@@ -1480,7 +1487,7 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Last Login
span.extra {{ userDialog.ref.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ userDialog.ref.last_login | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Date Joined
@@ -1694,11 +1701,11 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Created
span.extra {{ worldDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ worldDialog.ref.created_at | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Last Updated
span.extra {{ worldDialog.fileCreatedAt | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ worldDialog.fileCreatedAt | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Version
@@ -1710,7 +1717,7 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Last Visit
span.extra {{ worldDialog.lastVisit | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ worldDialog.lastVisit | formatDate('long') }}
.x-friend-item(@click="showPreviousInstancesWorldDialog(worldDialog.ref)")
.detail
span.name Visit Count
@@ -1789,11 +1796,11 @@ html
.x-friend-item(style="cursor:default")
.detail
span.name Created
span.extra {{ avatarDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ avatarDialog.ref.created_at | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Last Updated
span.extra {{ avatarDialog.ref.updated_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
span.extra {{ avatarDialog.ref.updated_at | formatDate('long') }}
.x-friend-item(style="cursor:default")
.detail
span.name Version
@@ -2723,12 +2730,12 @@ html
span(v-text="previousInstancesUserDialog.userRef.displayName" style="font-size:14px")
el-input(v-model="previousInstancesUserDialogTable.filters[0].value" placeholder="Search" style="display:block;width:150px;margin-top:15px")
data-tables(v-bind="previousInstancesUserDialogTable" v-loading="previousInstancesUserDialog.loading" style="margin-top:10px")
el-table-column(label="Date" prop="created_at" sortable width="90")
el-table-column(label="Date" prop="created_at" sortable width="110")
template(v-once #default="scope")
el-tooltip(placement="left")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="World" prop="name" sortable)
template(v-once #default="scope")
location(:location="scope.row.location" :hint="scope.row.name")
@@ -2748,12 +2755,12 @@ html
span(v-text="previousInstancesWorldDialog.worldRef.name" style="font-size:14px")
el-input(v-model="previousInstancesWorldDialogTable.filters[0].value" placeholder="Search" style="display:block;width:150px;margin-top:15px")
data-tables(v-bind="previousInstancesWorldDialogTable" v-loading="previousInstancesWorldDialog.loading" style="margin-top:10px")
el-table-column(label="Date" prop="created_at" sortable width="90")
el-table-column(label="Date" prop="created_at" sortable width="110")
template(v-once #default="scope")
el-tooltip(placement="left")
template(#content)
span {{ scope.row.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') }}
span {{ scope.row.created_at | formatDate('MM-DD HH24:MI') }}
span {{ scope.row.created_at | formatDate('long') }}
span {{ scope.row.created_at | formatDate('short') }}
el-table-column(label="Instance Name" prop="name")
template(v-once #default="scope")
span.x-link(@click="showLaunchDialog(scope.row.location)")

View File

@@ -39,29 +39,6 @@ Vue.component('marquee-text', MarqueeText);
String(Number(n) || 0).replace(/(\d)(?=(\d{3})+(?!\d))/gu, '$1,');
Vue.filter('commaNumber', commaNumber);
var formatDate = (s, format) => {
var dt = new Date(s);
if (isNaN(dt)) {
return escapeTag(s);
}
var hours = dt.getHours();
var map = {
YYYY: String(10000 + dt.getFullYear()).substr(-4),
MM: String(101 + dt.getMonth()).substr(-2),
DD: String(100 + dt.getDate()).substr(-2),
HH24: String(100 + hours).substr(-2),
HH: String(100 + (hours > 12 ? hours - 12 : hours)).substr(-2),
MI: String(100 + dt.getMinutes()).substr(-2),
SS: String(100 + dt.getSeconds()).substr(-2),
AMPM: hours >= 12 ? 'PM' : 'AM'
};
return format.replace(
/YYYY|MM|DD|HH24|HH|MI|SS|AMPM/gu,
(c) => map[c] || c
);
};
Vue.filter('formatDate', formatDate);
var textToHex = (s) =>
String(s)
.split('')
@@ -299,6 +276,7 @@ Vue.component('marquee-text', MarqueeText);
this.config = JSON.parse(json);
this.hudFeed = [];
this.hudTimeout = [];
this.setDatetimeFormat();
};
$app.methods.updateDownloadProgress = function (progress) {
@@ -342,7 +320,19 @@ Vue.component('marquee-text', MarqueeText);
$app.methods.updateStatsLoop = async function () {
try {
this.currentTime = new Date().toJSON();
this.currentTime = new Date()
.toLocaleDateString(this.currentCulture, {
month: '2-digit',
day: '2-digit',
year: 'numeric',
hour: 'numeric',
minute: 'numeric',
hour12: this.config.dtHour12
})
.replace(' AM', ' am')
.replace(' PM', ' pm')
.replace(',', '');
if (!this.config.hideCpuUsageFromFeed) {
var cpuUsage = await AppApi.CpuUsage();
this.cpuUsage = cpuUsage.toFixed(0);
@@ -598,6 +588,27 @@ Vue.component('marquee-text', MarqueeText);
this.hudTimeout = JSON.parse(json);
};
$app.data.currentCulture = await AppApi.CurrentCulture();
$app.methods.setDatetimeFormat = async function () {
this.currentCulture = await AppApi.CurrentCulture();
var formatDate = function (date) {
if (!date) {
return '';
}
var dt = new Date(date);
return dt
.toLocaleTimeString($app.currentCulture, {
hour: '2-digit',
minute: 'numeric',
hour12: $app.config.dtHour12
})
.replace(' am', '')
.replace(' pm', '');
};
Vue.filter('formatDate', formatDate);
};
$app = new Vue($app);
window.$app = $app;
})();

View File

@@ -21,24 +21,24 @@ html
.x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] #[location(:location="feed.location" :hint="feed.worldName")]
div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] ✖️
div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] ✔
template(v-if="feed.worldName")
| #[location(:location="feed.location" :hint="feed.worldName")]
div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")]
template(v-if="feed.statusDescription === feed.previousStatusDescription")
i.x-user-status(:class="statusClass(feed.previousStatus)")
@@ -49,28 +49,28 @@ html
div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ▶️ #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ◀️ #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
span.spin ▶️
span.name(v-text="feed.displayName" style="margin-left:20px")
div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
location(:location="feed.location" :hint="feed.worldName")
div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🎵 #[span.name(v-text="feed.displayName")]
template(v-if="feed.videoName")
| #[span(v-text="feed.videoName")]
@@ -79,130 +79,130 @@ html
div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")]
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 📩 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.requestMessage")]
div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")]
div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")]
div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 💚 #[span.name(v-text="feed.senderUsername")]
div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 💖 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 💔 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 📃 #[span.name(v-text="feed.previousDisplayName")] #[i.el-icon-right] #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🤝 #[span.name(v-text="feed.displayName")] {{ feed.previousTrustLevel }} #[i.el-icon-right] {{ feed.trustLevel }}
div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ✨ #[span.name(v-text="feed.displayName")]
template(v-if="feed.worldName")
| #[location(:location="feed.instanceId" :hint="feed.worldName")]
div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🧍 #[span.name(v-text="feed.displayName")] {{ feed.name }}
template(v-if="feed.description && feed.description !== feed.name")
| - {{ feed.description }}
div(v-else-if="feed.type === 'Event'" class="x-friend-item")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🛑 #[span.name(v-text="feed.data")]
div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ▶️ 🚫 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ◀️ 🚫 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ▶️ 🔇 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ◀️ 🔇 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'Blocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🚫 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| ⭕ #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🔇 #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| 🎤 #[span.name(v-text="feed.displayName")]
template(v-else)
template(v-for="feed in wristFeed")
.x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] is in #[location(:location="feed.location" :hint="feed.worldName")]
div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has logged out
div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has logged in
template(v-if="feed.worldName")
| to #[location(:location="feed.location" :hint="feed.worldName")]
div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")]
template(v-if="feed.statusDescription === feed.previousStatusDescription")
i.x-user-status(:class="statusClass(feed.previousStatus)")
@@ -213,27 +213,27 @@ html
div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has joined
div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has left
div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] is joining
div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
location(:location="feed.location" :hint="feed.worldName")
div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] changed video to
template(v-if="feed.videoName")
| #[span(v-text="feed.videoName")]
@@ -242,106 +242,106 @@ html
div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")]
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.senderUsername")] has requested an invite #[span(v-text="feed.details.requestMessage")]
div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.senderUsername")] has responded to your invite #[span(v-text="feed.details.responseMessage")]
div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.senderUsername")] has responded to your invite request #[span(v-text="feed.details.responseMessage")]
div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.senderUsername")] has sent you a friend request
div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] is now your friend
div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] is no longer your friend
div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.previousDisplayName")] changed their name to #[span.name(v-text="feed.displayName")]
div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] trust level is now {{ feed.trustLevel }}
div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has spawned a portal
template(v-if="feed.worldName")
| to #[location(:location="feed.instanceId" :hint="feed.worldName")]
div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] changed into avatar {{ feed.name }}
template(v-if="feed.description && feed.description !== feed.name")
| - {{ feed.description }}
div(v-else-if="feed.type === 'Event'" class="x-friend-item")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| Event: #[span.name(v-text="feed.data")]
div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| Blocked user #[span.name(v-text="feed.displayName")] has joined
div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| Blocked user #[span.name(v-text="feed.displayName")] has left
div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| Muted user #[span.name(v-text="feed.displayName")] has joined
div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| Muted user #[span.name(v-text="feed.displayName")] has left
div(v-else-if="feed.type === 'Blocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has blocked you
div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has unblocked you
div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has muted you
div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
.detail
span.extra
span.time {{ feed.created_at | formatDate('HH:MI') }}
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text="feed.displayName")] has unmuted you
.x-containerbottom
div(style="display:flex;flex-direction:row")
@@ -409,7 +409,7 @@ html
span(style="display:inline-block;font-weight:bold") {{ lastLocation.friendList.length !== 0 ? ` (${lastLocation.friendList.length})` : ''}}
span(v-if="photonLobbyBotSize > 0 && lastLocation.playerList.length > 0" style="display:inline-block;color:red;margin-left:5px") {{ photonLobbyBotSize }}
br
span(style="float:right") {{ currentTime | formatDate('YYYY-MM-DD HH:MI:SS AMPM') }}
span(style="float:right") {{ currentTime }}
span(v-if="config && !config.hideCpuUsageFromFeed" style="display:inline-block;margin-right:5px") CPU: {{ cpuUsage }}%
span(style="display:inline-block") Online: {{ onlineFriendCount }}
template(v-else)