Files
VRCX/src/vr.pug
2025-03-01 21:00:33 +13:00

782 lines
54 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
doctype html
#x-app.x-app.x-app-type(:class='{ background: appType === "1" && config && config.backgroundEnabled }')
template(v-if='appType === "1"')
.x-container(style='flex: 1')
.x-friend-list(ref='list' style='color: #aaa')
template(v-if='config && config.minimalFeed')
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 }}
i.el-icon-loading(v-if='feed.isTraveling' style='margin-right: 5px')
| #[span.name(v-text='feed.displayName')] #[location(:location='feed.location' :hint='feed.worldName' :grouphint='feed.groupName')]
.x-friend-item(
v-else-if='feed.type === "Offline"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] ✖️
.x-friend-item(
v-else-if='feed.type === "Online"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] ✔
template(v-if='feed.worldName')
|#[location(:location='feed.location' :hint='feed.worldName' :grouphint='feed.groupName' style='margin-left: 5px')]
.x-friend-item(
v-else-if='feed.type === "Status"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' style='margin-right: 5px')]
template(v-if='feed.statusDescription === feed.previousStatusDescription')
i.x-user-status(:class='statusClass(feed.previousStatus)')
i.el-icon-right
i.x-user-status(:class='statusClass(feed.status)')
template(v-else)
|#[i.x-user-status(:class='statusClass(feed.status)')] {{ feed.statusDescription }}
.x-friend-item(
v-else-if='feed.type === "OnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ▶️ #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
.x-friend-item(
v-else-if='feed.type === "OnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ◀️ #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
.x-friend-item(
v-else-if='feed.type === "OnPlayerJoining"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
span.spin ▶️
span.name(v-text='feed.displayName' style='margin-left: 30px')
.x-friend-item(
v-else-if='feed.type === "Location"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
location(
:location='feed.location'
:hint='feed.worldName'
:grouphint='feed.groupName')
.x-friend-item(
v-else-if='feed.type === "VideoPlay"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🎵 #[span.name(v-if='feed.displayName' v-text='feed.displayName' style='margin-right: 5px' :style='{ color: feed.tagColour }')]
template(v-if='feed.videoName')
|#[span(v-text='feed.videoName')]
template(v-else)
|#[span(v-text='feed.videoUrl')]
.x-friend-item(
v-else-if='feed.type === "invite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
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')]
.x-friend-item(
v-else-if='feed.type === "requestInvite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 📩 #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.details.requestMessage')]
.x-friend-item(
v-else-if='feed.type === "inviteResponse"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.details.responseMessage')]
.x-friend-item(
v-else-if='feed.type === "requestInviteResponse"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.details.responseMessage')]
.x-friend-item(
v-else-if='feed.type === "friendRequest"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💚 #[span.name(v-text='feed.senderUsername')]
.x-friend-item(
v-else-if='feed.type === "Friend"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💖 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "Unfriend"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💔 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "DisplayName"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 📃 #[span.name(v-text='feed.previousDisplayName')] #[i.el-icon-right] #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "TrustLevel"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🤝 #[span.name(v-text='feed.displayName')] {{ feed.previousTrustLevel }} #[i.el-icon-right] {{ feed.trustLevel }}
.x-friend-item(
v-else-if='feed.type === "boop"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 👉 #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "groupChange"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.announcement"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.informative"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.invite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.joinRequest"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.transfer"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🏷️ #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.queueReady"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 📨 #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "instance.closed"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 📫 #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "PortalSpawn"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
template(v-if='feed.displayName')
| ✨ #[span.name(v-text='feed.displayName' style='margin-right: 5px' :style='{ color: feed.tagColour }')]
| #[location(:location='feed.instanceId' :hint='feed.worldName' :grouphint='feed.groupName')]
template(v-else)
| ✨ User has spawned a portal
.x-friend-item(
v-else-if='feed.type === "AvatarChange"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🧍 #[span.name(v-text='feed.displayName' style='margin-right: 5px' :style='{ color: feed.tagColour }')]
template(v-if='feed.releaseStatus === "public"')
|#[i.x-user-status.online] 
template(v-else-if='feed.releaseStatus === "private"')
|#[i.x-user-status.askme] 
| {{ feed.name }}
template(v-if='feed.description && feed.description !== feed.name')
|
| - {{ feed.description }}
.x-friend-item(
v-else-if='feed.type === "ChatBoxMessage"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 💬 #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] #[span(v-text='feed.text')]
.x-friend-item(v-else-if='feed.type === "Event"')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🛑 #[span.name(v-text='feed.data')]
.x-friend-item(v-else-if='feed.type === "External"')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🟠 #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "BlockedOnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ▶️ 🚫 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "BlockedOnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ◀️ 🚫 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "MutedOnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ▶️ 🔇 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "MutedOnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ◀️ 🔇 #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "Blocked"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🚫 #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
.x-friend-item(
v-else-if='feed.type === "Unblocked"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| ⭕ #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
.x-friend-item(
v-else-if='feed.type === "Muted"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🔇 #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
.x-friend-item(
v-else-if='feed.type === "Unmuted"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| 🎤 #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
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 }}
template(v-if='feed.isTraveling')
|#[span.name(v-text='feed.displayName')] is traveling to #[location(:location='feed.location' :hint='feed.worldName' :grouphint='feed.groupName')]
template(v-else)
|#[span.name(v-text='feed.displayName')] is in #[location(:location='feed.location' :hint='feed.worldName' :grouphint='feed.groupName')]
.x-friend-item(
v-else-if='feed.type === "Offline"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] has logged out
.x-friend-item(
v-else-if='feed.type === "Online"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')]
span(style='margin-left: 5px; margin-right: 5px') has logged in
template(v-if='feed.worldName')
| to #[location(:location='feed.location' :hint='feed.worldName' :grouphint='feed.groupName')]
.x-friend-item(
v-else-if='feed.type === "Status"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' style='margin-right: 5px')]
template(v-if='feed.statusDescription === feed.previousStatusDescription')
i.x-user-status(:class='statusClass(feed.previousStatus)')
i.el-icon-right
i.x-user-status(:class='statusClass(feed.status)')
template(v-else)
|#[i.x-user-status(:class='statusClass(feed.status)')] {{ feed.statusDescription }}
.x-friend-item(
v-else-if='feed.type === "OnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has joined
.x-friend-item(
v-else-if='feed.type === "OnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has left
.x-friend-item(
v-else-if='feed.type === "OnPlayerJoining"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] is joining
.x-friend-item(
v-else-if='feed.type === "Location"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
location(
:location='feed.location'
:hint='feed.worldName'
:grouphint='feed.groupName')
.x-friend-item(
v-else-if='feed.type === "VideoPlay"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
span(style='margin-left: 5px; margin-right: 5px') changed video to
template(v-if='feed.videoName')
|#[span(v-text='feed.videoName')]
template(v-else)
|#[span(v-text='feed.videoUrl')]
.x-friend-item(
v-else-if='feed.type === "invite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
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')]
.x-friend-item(
v-else-if='feed.type === "requestInvite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] has requested an invite #[span(v-text='feed.details.requestMessage')]
.x-friend-item(
v-else-if='feed.type === "inviteResponse"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] has responded to your invite #[span(v-text='feed.details.responseMessage')]
.x-friend-item(
v-else-if='feed.type === "requestInviteResponse"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] has responded to your invite request #[span(v-text='feed.details.responseMessage')]
.x-friend-item(
v-else-if='feed.type === "friendRequest"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] has sent you a friend request
.x-friend-item(
v-else-if='feed.type === "Friend"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] is now your friend
.x-friend-item(
v-else-if='feed.type === "Unfriend"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] is no longer your friend
.x-friend-item(
v-else-if='feed.type === "DisplayName"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.previousDisplayName')] changed their name to #[span.name(v-text='feed.displayName')]
.x-friend-item(
v-else-if='feed.type === "TrustLevel"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName')] trust level is now {{ feed.trustLevel }}
.x-friend-item(
v-else-if='feed.type === "boop"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "groupChange"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.senderUsername')] #[span(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.announcement"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.informative"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.invite"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.joinRequest"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.transfer"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "group.queueReady"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "instance.closed"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "PortalSpawn"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
template(v-if='feed.displayName')
|#[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has spawned a portal to
| #[location(:location='feed.instanceId' :hint='feed.worldName' :grouphint='feed.groupName' style='margin-left: 5px')]
template(v-else)
| User has spawned a portal
.x-friend-item(
v-else-if='feed.type === "AvatarChange"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')]
span(style='margin-left: 5px; margin-right: 5px') changed into avatar
template(v-if='feed.releaseStatus === "public"')
|#[i.x-user-status.online]
template(v-else)
|#[i.x-user-status.askme]
|
| {{ feed.name }}
template(v-if='feed.description && feed.description !== feed.name')
|
| - {{ feed.description }}
.x-friend-item(
v-else-if='feed.type === "ChatBoxMessage"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] said #[span(v-text='feed.text')]
.x-friend-item(v-else-if='feed.type === "Event"')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| Event: #[span.name(v-text='feed.data')]
.x-friend-item(v-else-if='feed.type === "External"')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| External: #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] #[span.name(v-text='feed.message')]
.x-friend-item(
v-else-if='feed.type === "BlockedOnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| Blocked user #[span.name(v-text='feed.displayName')] has joined
.x-friend-item(
v-else-if='feed.type === "BlockedOnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| Blocked user #[span.name(v-text='feed.displayName')] has left
.x-friend-item(
v-else-if='feed.type === "MutedOnPlayerJoined"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| Muted user #[span.name(v-text='feed.displayName')] has joined
.x-friend-item(
v-else-if='feed.type === "MutedOnPlayerLeft"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| Muted user #[span.name(v-text='feed.displayName')] has left
.x-friend-item(
v-else-if='feed.type === "Blocked"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has blocked you
.x-friend-item(
v-else-if='feed.type === "Unblocked"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has unblocked you
.x-friend-item(
v-else-if='feed.type === "Muted"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has muted you
.x-friend-item(
v-else-if='feed.type === "Unmuted"'
:class='{ friend: feed.isFriend, favorite: feed.isFavorite }')
.detail
span.extra
span.time {{ feed.created_at | formatDate }}
| #[span.name(v-text='feed.displayName' :style='{ color: feed.tagColour }')] has unmuted you
.x-containerbottom
div(style='display: flex; flex-direction: row; flex-wrap: wrap')
.tracker-container(v-for='device in devices')
.tracker-device(v-if='device[0] === "headset"' :class='trackingResultToClass(device[4])')
img.tracker-device(
v-if='device[1] !== "connected"'
src='images/headset_quest_status_off.png'
:class='trackingResultToClass(device[4])')
img(v-else-if='device[2] === "charging"' src='images/headset_quest_status_ready_charging.png')
img(v-else-if='device[3] < 20' src='images/headset_quest_status_ready_low.png')
img(v-else src='images/headset_quest_status_ready.png')
span {{ device[3] }}%
.tracker-device(v-if='device[0] === "leftController"' :class='trackingResultToClass(device[4])')
img.tracker-device(
v-if='device[1] !== "connected"'
src='images/left_controller_status_off.png'
:class='trackingResultToClass(device[4])')
img(
v-else-if='device[2] === "charging"'
src='images/left_controller_status_ready_charging.png')
img(v-else-if='device[3] < 20' src='images/left_controller_status_ready_low.png')
img(v-else src='images/left_controller_status_ready.png')
span {{ device[3] }}%
.tracker-device(
v-else-if='device[0] === "rightController"'
:class='trackingResultToClass(device[4])')
img(v-if='device[1] !== "connected"' src='images/right_controller_status_off.png')
img(
v-else-if='device[2] === "charging"'
src='images/right_controller_status_ready_charging.png')
img(v-else-if='device[3] < 20' src='images/right_controller_status_ready_low.png')
img(v-else src='images/right_controller_status_ready.png')
span {{ device[3] }}%
.tracker-device(v-else-if='device[0] === "controller"' :class='trackingResultToClass(device[4])')
img(v-if='device[1] !== "connected"' src='images/controller_status_off.png')
img(v-else-if='device[2] === "charging"' src='images/controller_status_ready_charging.png')
img(v-else-if='device[3] < 20' src='images/controller_status_ready_low.png')
img(v-else src='images/controller_status_ready.png')
span {{ device[3] }}%
.tracker-device(v-else-if='device[0] === "tracker"' :class='trackingResultToClass(device[4])')
img(v-if='device[1] !== "connected"' src='images/tracker_status_off.png')
img(v-else-if='device[2] === "charging"' src='images/tracker_status_ready_charging.png')
img(v-else-if='device[3] < 20' src='images/tracker_status_ready_low.png')
img(v-else src='images/tracker_status_ready.png')
span {{ device[3] }}%
.tracker-device(v-else-if='device[0] === "base"' :class='trackingResultToClass(device[4])')
img(v-if='device[1] !== "connected"' src='images/base_status_off.png')
img(v-else src='images/base_status_ready.png')
span(v-if='device[3] !== 100') {{ device[3] }}x
.x-containerbottom
template(v-if='nowPlaying.playing')
span(style='float: right; padding-left: 10px') {{ nowPlaying.remainingText }}
marquee-text {{ nowPlaying.name }}
.np-progress-bar(:style='{ width: nowPlaying.percentage + "%" }')
template(v-if='lastLocation.date !== 0')
template(v-if='config && config.minimalFeed')
span(style='float: right') {{ lastLocationTimer }}
template(v-if='onlineForTimer')
| &nbsp;/ {{ onlineForTimer }}
template(v-if='pcUptime')
| &nbsp;/ {{ pcUptime }}
span(style='display: inline-block') {{ lastLocation.playerList.length }}
span(style='display: inline-block; font-weight: bold') {{ lastLocation.friendList.length !== 0 ? ` (${lastLocation.friendList.length})` : '' }}
template(v-else)
span(style='float: right') {{ $t('vr.status.timer') }} {{ lastLocationTimer }}
template(v-if='onlineForTimer')
| &nbsp;/ {{ onlineForTimer }}
template(v-if='pcUptime')
| &nbsp;/ {{ pcUptime }}
span(style='display: inline-block') {{ $t('vr.status.players') }} {{ lastLocation.playerList.length }}
span(style='display: inline-block; font-weight: bold') {{ lastLocation.friendList.length !== 0 ? ` (${lastLocation.friendList.length})` : '' }}
br
span(style='float: right') {{ currentTime }}
span(v-if='config && cpuUsageEnabled' style='display: inline-block; margin-right: 5px') {{ $t('vr.status.cpu') }} {{ cpuUsage }}%
span(style='display: inline-block') {{ $t('vr.status.online') }} {{ onlineFriendCount }} {{ customInfo }}
template(v-else)
svg.np-progress-circle
circle.np-progress-circle-stroke(
cx='60'
cy='60'
stroke='white'
r='30'
fill='transparent'
stroke-width='60')
.hud-feed
div(v-for='feed in hudFeed')
.item(:class='{ friend: feed.isFriend, favorite: feed.isFavorite }') #[span(v-if='feed.isMaster') 👑]#[span(v-if='feed.isModerator') ⚔️]#[strong.name(v-text='feed.displayName' :style='{ color: feed.colour }')]
template(v-if='feed.type === "ChangeAvatar"')
span(style='margin-left: 10px; color: #a3a3a3') ChangeAvatar
span(v-if='!feed.inCache' style='color: #aaa; margin-left: 10px') #[i.el-icon-download]
span(v-text='feed.avatar.name' style='margin-left: 10px')
span(v-if='feed.avatar.releaseStatus === "public"' style='margin-left: 10px; color: #67c23a') (Public)
span(
v-else-if='feed.avatar.releaseStatus === "private"'
style='margin-left: 10px; color: #e6a23c') (Private)
template(v-else-if='feed.type === "ChangeStatus"')
span(style='margin-left: 10px; color: #a3a3a3') ChangeStatus
span(v-if='feed.status !== feed.previousStatus')
i.x-user-status(
:class='statusClass(feed.previousStatus)'
style='margin-left: 10px; width: 20px; height: 20px')
span
i.el-icon-right
i.x-user-status(:class='statusClass(feed.status)' style='width: 20px; height: 20px')
span(
v-if='feed.statusDescription !== feed.previousStatusDescription'
v-text='feed.statusDescription'
style='margin-left: 10px')
template(v-else-if='feed.type === "ChangeGroup"')
span(style='margin-left: 10px; color: #a3a3a3') ChangeGroup
span(v-text='feed.groupName' style='margin-left: 10px')
template(v-else-if='feed.type === "ChatBoxMessage"')
span(style='margin-left: 10px; color: #a3a3a3') ChatBox
span(v-text='feed.text' style='margin-left: 10px; white-space: normal')
template(v-else-if='feed.type === "PortalSpawn"')
span(style='margin-left: 10px; color: #a3a3a3') PortalSpawn
location(
:location='feed.location'
:hint='feed.worldName'
:grouphint='feed.groupName'
:link='false'
style='margin-left: 10px')
template(v-else-if='feed.type === "OnPlayerJoined"')
span(style='margin-left: 10px; color: #a3a3a3') has joined
span(v-if='feed.platform === "Desktop"' style='color: #409eff; margin-left: 10px') Desktop
span(v-else-if='feed.platform === "VR"' style='color: #409eff; margin-left: 10px') VR
span(v-else-if='feed.platform === "Quest"' style='color: #67c23a; margin-left: 10px') Quest
span(v-else-if='feed.platform === "iOS"' style='color: #c7c7ce; margin-left: 10px') iOS
span(v-if='!feed.inCache' style='color: #aaa; margin-left: 10px') #[i.el-icon-download]
span(v-text='feed.avatar.name' style='margin-left: 10px')
template(v-else-if='feed.type === "SpawnEmoji"')
span(style='margin-left: 10px; color: #a3a3a3') SpawnEmoji
span(v-text='feed.text' style='margin-left: 10px')
span(
v-else-if='feed.color === "yellow"'
v-text='feed.text'
style='color: yellow; margin-left: 10px')
span(v-else style='margin-left: 10px; color: #a3a3a3' v-text='feed.text')
template(v-if='feed.combo > 1')
span.combo(style='margin-left: 10px') x{{ feed.combo }}
.hud-timeout(v-if='hudTimeout.length > 0')
.hud-timeout-feed
div(v-for='feed in hudTimeout')
p.item ({{ feed.time }}s) {{ feed.displayName }}
svg(
version='1.1'
xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'
xml:space='preserve')
path(
fill='#ED1B24'
d='M68.6,96.5L87,78.1c1.6-1.6,1.6-4.1,0-5.7s-4.1-1.6-5.7,0L62.9,90.9L44.5,72.5l18.4-18.4c1.6-1.6,1.6-4.1,0-5.7c-1.6-1.6-4.1-1.6-5.7,0L38.9,66.8l-6.4-6.4L21.2,71.8C11,82,9.7,97.9,17.4,109.5L0,126.9l8.5,8.5L25.9,118c11.6,7.7,27.5,6.4,37.8-3.8L75,102.9C75,102.9,68.6,96.5,68.6,96.5z')
path(
fill='#ED1B24'
d='M102.9,75l11.3-11.3c10.3-10.3,11.5-26.1,3.8-37.8l17.4-17.4L126.9,0l-17.4,17.4C97.9,9.7,82,11,71.8,21.2L60.5,32.5C102,74,60.8,32.9,102.9,75z')
script(src='vendor.js')
script(src='vr.js')