diff --git a/html/src/index.pug b/html/src/index.pug
index 8170ab3f..9364afb9 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -17,10 +17,10 @@ html
link(rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans+JP|Noto+Sans+KR&display=swap")
link(rel="stylesheet" href="app.css")
body
- div.x-app#x-app(style="display:none")
+ .x-app#x-app(style="display:none")
//- login
- div.x-login-container(v-show="!API.isLoggedIn")
+ .x-login-container(v-show="!API.isLoggedIn")
div(style="width:300px;margin:auto")
el-form(ref="loginForm" :model="loginForm" :rules="loginForm.rules" v-loading="loginForm.loading" @submit.native.prevent="login()")
el-form-item(label="Username or Email" prop="username" required)
@@ -38,7 +38,7 @@ html
p pypy is not responsible for any problems caused by VRCX. Use at your own risk!
//- menu
- div.x-menu-container
+ .x-menu-container
el-menu(ref="menu" collapse @select="selectMenu")
mixin menuitem(index, name, icon)
el-menu-item(index=index)
@@ -55,7 +55,7 @@ html
+menuitem('more', 'More', 'el-icon-s-tools')
//- feed
- div.x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'feed'")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'feed'")
data-tables(v-bind="feedTable")
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
@@ -83,12 +83,12 @@ html
template(v-else-if="scope.row.type === 'Avatar'")
el-popover(placement="right" width="500px" trigger="click")
img(v-lazy="scope.row.avatar[1]" style="width:500px;height:375px")
- img(slot="reference" v-lazy="scope.row.avatar[1]" class="x-link" style="flex:none;width:160px;height:120px;border-radius:4px")
+ img.x-link(slot="reference" v-lazy="scope.row.avatar[1]" style="flex:none;width:160px;height:120px;border-radius:4px")
span(style="position:relative;top:-50px;margin:0 5px")
- i(class="el-icon-right")
+ i.el-icon-right
el-popover(placement="right" width="500px" trigger="click")
img(v-lazy="scope.row.avatar[0]" style="width:500px;height:375px")
- img(slot="reference" v-lazy="scope.row.avatar[0]" class="x-link" style="flex:none;width:160px;height:120px;border-radius:4px")
+ img.x-link(slot="reference" v-lazy="scope.row.avatar[0]" style="flex:none;width:160px;height:120px;border-radius:4px")
template(v-else-if="scope.row.type === 'Status'")
el-tooltip(placement="top")
template(#content)
@@ -97,11 +97,11 @@ html
span(v-else-if="scope.row.status[1].status === 'ask me'") Ask Me
span(v-else-if="scope.row.status[1].status === 'busy'") Do Not Disturb
span(v-else) Offline
- i(class="x-user-status" :class="userStatusClass(scope.row.status[1])")
+ i.x-user-status(:class="userStatusClass(scope.row.status[1])")
span(v-text="scope.row.status[1].statusDescription")
br
span
- i(class="el-icon-right")
+ i.el-icon-right
el-tooltip(placement="top")
template(#content)
span(v-if="scope.row.status[0].status === 'active'") Online
@@ -109,7 +109,7 @@ html
span(v-else-if="scope.row.status[0].status === 'ask me'") Ask Me
span(v-else-if="scope.row.status[0].status === 'busy'") Do Not Disturb
span(v-else) Offline
- i(class="x-user-status" :class="userStatusClass(scope.row.status[0])")
+ i.x-user-status(:class="userStatusClass(scope.row.status[0])")
span(v-text="scope.row.status[0].statusDescription")
el-table-column(label="Time" prop="created_at" sortable="custom" width="80")
template(v-once #default="scope")
@@ -120,7 +120,7 @@ html
el-table-column(label="Type" prop="type" width="100")
el-table-column(label="User" prop="displayName")
template(v-once #default="scope")
- span(v-text="scope.row.displayName" @click="showUserDialog(scope.row.userId)" class="x-link")
+ span.x-link(v-text="scope.row.displayName" @click="showUserDialog(scope.row.userId)")
el-table-column(label="Detail")
template(v-once #default="scope")
template(v-if="scope.row.type === 'GPS'")
@@ -135,11 +135,11 @@ html
span(v-else-if="scope.row.status[0].status === 'ask me'") Ask Me
span(v-else-if="scope.row.status[0].status === 'busy'") Do Not Disturb
span(v-else) Offline
- i(class="x-user-status" :class="userStatusClass(scope.row.status[0])")
+ i.x-user-status(:class="userStatusClass(scope.row.status[0])")
span(v-text="scope.row.status[0].statusDescription")
//- gameLog
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'gameLog'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'gameLog'")
data-tables(v-bind="gameLogTable")
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
@@ -157,65 +157,65 @@ html
el-table-column(label="Detail")
template(v-once #default="scope")
location(v-if="scope.row.type === 'Location'" :location="scope.row.data")
- span(v-else v-text="scope.row.data" @click="lookupUser(scope.row.data)" class="x-link")
+ span.x-link(v-else v-text="scope.row.data" @click="lookupUser(scope.row.data)")
//- search
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'search'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'search'")
div(style="margin:0 0 10px;display:flex;align-items:center")
el-input(v-model="searchText" clearable placeholder="Search" @keyup.native.13="search()" style="flex:1")
el-button(type="default" @click="clearSearch()" icon="el-icon-delete" circle style="flex:none;margin-left:10px")
el-tabs(ref="searchTab" type="card" style="margin-top:15px")
el-tab-pane(label="User" v-loading="isSearchUserLoading" style="min-height:60px")
- div(class="x-friend-list")
- div(v-for="user in searchUserResults" :key="user.id" @click="showUserDialog(user.id)" class="x-friend-item")
+ .x-friend-list
+ .x-friend-item(v-for="user in searchUserResults" :key="user.id" @click="showUserDialog(user.id)")
template(v-once)
- div(class="avatar")
+ .avatar
img(v-lazy="user.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="user.displayName" class="name" :class="user.$trustClass")
- span(v-text="user.username" class="extra" style="font-family:monospace")
+ .detail
+ span.name(v-text="user.displayName" :class="user.trustClass")
+ span.extra(v-text="user.username" style="font-family:monospace")
el-button-group(style="margin-top:15px")
el-button(v-if="searchUserParams.offset" @click="moreSearchUser(-1)" icon="el-icon-back" size="small") Prev
el-button(v-if="searchUserResults.length" @click="moreSearchUser(1)" icon="el-icon-right" size="small") Next
el-tab-pane(label="World" v-loading="isSearchWorldLoading" style="min-height:60px")
el-dropdown(@command="(row) => searchWorld(row)" size="small" trigger="click" style="margin-bottom:15px")
- el-button(size="small") Search by Category #[i(class="el-icon-arrow-down el-icon--right")]
+ el-button(size="small") Search by Category #[i.el-icon-arrow-down.el-icon--right]
el-dropdown-menu(#default="dropdown")
el-dropdown-item(v-for="row in API.cachedConfig.dynamicWorldRows" :key="row.index" v-text="row.name" :command="row")
- div(class="x-friend-list")
- div(v-for="world in searchWorldResults" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item")
+ .x-friend-list
+ .x-friend-item(v-for="world in searchWorldResults" :key="world.id" @click="showWorldDialog(world.id)")
template(v-once)
- div(class="avatar")
+ .avatar
img(v-lazy="world.thumbnailImageUrl")
- div(class="detail")
- span(v-text="world.name" class="name")
- span(v-if="world.occupants" class="extra") {{ world.authorName }} ({{ world.occupants }})
- span(v-else v-text="world.authorName" class="extra")
+ .detail
+ span.name(v-text="world.name")
+ span.extra(v-if="world.occupants") {{ world.authorName }} ({{ world.occupants }})
+ span.extra(v-else v-text="world.authorName")
el-button-group(style="margin-top:15px")
el-button(v-if="searchWorldParams.offset" @click="moreSearchWorld(-1)" icon="el-icon-back" size="small") Prev
el-button(v-if="searchWorldResults.length" @click="moreSearchWorld(1)" icon="el-icon-right" size="small") Next
el-tab-pane(label="Avatar" v-loading="isSearchAvatarLoading" style="min-height:60px")
el-dropdown(@command="(command) => searchAvatar(command)" size="small" trigger="click" style="margin-bottom:15px")
- el-button(size="small") Search by Category #[i(class="el-icon-arrow-down el-icon--right")]
+ el-button(size="small") Search by Category #[i.el-icon-arrow-down.el-icon--right]
el-dropdown-menu(#default="dropdown")
el-dropdown-item(command="updated") Updated Recently
el-dropdown-item(command="created") New
el-dropdown-item(command="mine") Mine
span(style="margin-left:10px;font-size:12px;color:#909399") Avatar search is not possible.
- div(class="x-friend-list")
- div(v-for="avatar in searchAvatarResults" :key="avatar.id" @click="showAvatarDialog(avatar.id)" class="x-friend-item")
+ .x-friend-list
+ .x-friend-item(v-for="avatar in searchAvatarResults" :key="avatar.id" @click="showAvatarDialog(avatar.id)")
template(v-once)
- div(class="avatar")
+ .avatar
img(v-lazy="avatar.thumbnailImageUrl")
- div(class="detail")
- span(v-text="avatar.name" class="name")
- span(v-text="avatar.authorName" class="extra")
+ .detail
+ span.name(v-text="avatar.name")
+ span.extra(v-text="avatar.authorName")
el-button-group(style="margin-top:15px")
el-button(v-if="searchAvatarParams.offset" @click="moreSearchAvatar(-1)" icon="el-icon-back" size="small") Prev
el-button(v-if="searchAvatarResults.length" @click="moreSearchAvatar(1)" icon="el-icon-right" size="small") Next
//- favorite
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'favorite'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'favorite'")
el-button(type="default" :loading="API.isFavoriteLoading" @click="API.refreshFavorites()" size="small" icon="el-icon-refresh" circle style="position:relative;float:right;z-index:1")
el-tabs(type="card" v-loading="API.isFavoriteLoading")
el-tab-pane(label="Friend")
@@ -226,14 +226,14 @@ html
span(style="color:#909399;font-size:12px;margin-left:10px") {{ group.count }}/{{ group.capacity }}
el-button(@click.stop="changeFavoriteGroupName(group)" size="mini" icon="el-icon-edit" circle style="margin-left:10px")
el-button(@click.stop="clearFavoriteGroup(group)" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
- div(v-if="group.count" class="x-friend-list" style="margin-top:10px")
- div(v-for="favorite in favoriteFriends" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showUserDialog(favorite.id)" class="x-friend-item")
+ .x-friend-list(v-if="group.count" style="margin-top:10px")
+ .x-friend-item(v-for="favorite in favoriteFriends" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showUserDialog(favorite.id)")
template(v-if="favorite.ref")
- div(class="avatar" :class="userStatusClass(favorite.ref)")
+ .avatar(:class="userStatusClass(favorite.ref)")
img(v-lazy="favorite.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="favorite.ref.displayName" class="name" :class="favorite.ref.$trustClass")
- location(v-if="favorite.ref.location !== 'offline'" :location="favorite.ref.location" :link="false" class="extra")
+ .detail
+ span.name(v-text="favorite.ref.displayName" :class="favorite.ref.$trustClass")
+ location.extra(v-if="favorite.ref.location !== 'offline'" :location="favorite.ref.location" :link="false")
span(v-else v-text="favorite.ref.statusDescription")
template(v-else)
span(v-text="favorite.name || favorite.id")
@@ -246,15 +246,15 @@ html
span(style="color:#909399;font-size:12px;margin-left:10px") {{ group.count }}/{{ group.capacity }}
el-button(@click.stop="changeFavoriteGroupName(group)" size="mini" icon="el-icon-edit" circle style="margin-left:10px")
el-button(@click.stop="clearFavoriteGroup(group)" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
- div(v-if="group.count" class="x-friend-list" style="margin-top:10px")
- div(v-for="favorite in favoriteWorlds" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showWorldDialog(favorite.id)" class="x-friend-item")
+ .x-friend-list(v-if="group.count" style="margin-top:10px")
+ .x-friend-item(v-for="favorite in favoriteWorlds" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showWorldDialog(favorite.id)")
template(v-if="favorite.ref")
- div(class="avatar")
+ .avatar
img(v-lazy="favorite.ref.thumbnailImageUrl")
- div(class="detail")
- span(v-text="favorite.ref.name" class="name")
- span(v-if="favorite.ref.occupants" class="extra") {{ favorite.ref.authorName }} ({{ favorite.ref.occupants }})
- span(v-else v-text="favorite.ref.authorName" class="extra")
+ .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-else)
span(v-text="favorite.name || favorite.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="deleteFavorite(favorite.id)" style="margin-left:5px")
@@ -266,20 +266,20 @@ html
span(style="color:#909399;font-size:12px;margin-left:10px") {{ group.count }}/{{ group.capacity }}
el-button(@click.stop="changeFavoriteGroupName(group)" size="mini" icon="el-icon-edit" circle style="margin-left:10px")
el-button(@click.stop="clearFavoriteGroup(group)" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
- div(v-if="group.count" class="x-friend-list" style="margin-top:10px")
- div(v-for="favorite in favoriteAvatars" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showAvatarDialog(favorite.id)" class="x-friend-item")
+ .x-friend-list(v-if="group.count" style="margin-top:10px")
+ .x-friend-item(v-for="favorite in favoriteAvatars" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showAvatarDialog(favorite.id)")
template(v-if="favorite.ref")
- div(class="avatar")
+ .avatar
img(v-lazy="favorite.ref.thumbnailImageUrl")
- div(class="detail")
- span(v-text="favorite.ref.name" class="name")
- span(class="extra" v-text="favorite.ref.authorName")
+ .detail
+ span.name(v-text="favorite.ref.name")
+ span.extra(v-text="favorite.ref.authorName")
template(v-else)
span(v-text="favorite.name || favorite.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="deleteFavorite(favorite.id)" style="margin-left:5px")
//- friendLog
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'friendLog'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'friendLog'")
data-tables(v-bind="friendLogTable")
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
@@ -295,18 +295,18 @@ html
el-table-column(label="Type" prop="type" width="150")
el-table-column(label="User" prop="displayName")
template(v-once #default="scope")
- span(v-if="scope.row.type === 'DisplayName'") {{ scope.row.previousDisplayName }} #[i(class="el-icon-right")]
+ span(v-if="scope.row.type === 'DisplayName'") {{ scope.row.previousDisplayName }} #[i.el-icon-right]
|
- span(v-text="scope.row.displayName || scope.row.userId" @click="showUserDialog(scope.row.userId)" class="x-link")
+ span.x-link(v-text="scope.row.displayName || scope.row.userId" @click="showUserDialog(scope.row.userId)")
template(v-if="scope.row.type === 'TrustLevel'")
br
- span ({{ scope.row.previousTrustLevel }} #[i(class="el-icon-right")] {{ scope.row.trustLevel }})
+ span ({{ scope.row.previousTrustLevel }} #[i.el-icon-right] {{ scope.row.trustLevel }})
el-table-column(label="Action" width="80" align="right")
template(v-once #default="scope")
el-button(type="text" icon="el-icon-close" size="mini" @click="deleteFriendLog(scope.row)")
//- moderation
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'moderation'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'moderation'")
data-tables(v-bind="playerModerationTable" v-loading="API.isPlayerModerationsLoading")
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
@@ -323,16 +323,16 @@ html
el-table-column(label="Type" prop="type" width="120")
el-table-column(label="Source" prop="sourceDisplayName")
template(v-once #default="scope")
- span(v-text="scope.row.sourceDisplayName" @click="showUserDialog(scope.row.sourceUserId)" class="x-link")
+ span.x-link(v-text="scope.row.sourceDisplayName" @click="showUserDialog(scope.row.sourceUserId)")
el-table-column(label="Target" prop="targetDisplayName")
template(v-once #default="scope")
- span(v-text="scope.row.targetDisplayName" @click="showUserDialog(scope.row.targetUserId)" class="x-link")
+ span.x-link(v-text="scope.row.targetDisplayName" @click="showUserDialog(scope.row.targetUserId)")
el-table-column(label="Action" width="80" align="right")
template(v-once #default="scope")
el-button(v-if="scope.row.sourceUserId === API.currentUser.id" type="text" icon="el-icon-close" size="mini" @click="deletePlayerModeration(scope.row)")
//- notification
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'notification'" v-loading="API.isNotificationsLoading" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'notification'" v-loading="API.isNotificationsLoading")
data-tables(v-bind="notificationTable")
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
@@ -351,34 +351,34 @@ html
el-tooltip(placement="top" v-if="scope.row.type === 'invite'")
template(#content)
span(v-text="API.parseInviteLocation(scope.row)")
- span(v-text="scope.row.type" @click="showWorldDialog(scope.row.details.worldId)" class="x-link")
+ span.x-link(v-text="scope.row.type" @click="showWorldDialog(scope.row.details.worldId)")
span(v-else v-text="scope.row.type")
el-table-column(label="User" prop="senderUsername")
template(v-once #default="scope")
- span(v-text="scope.row.senderUsername" @click="showUserDialog(scope.row.senderUserId)" class="x-link")
+ span.x-link(v-text="scope.row.senderUsername" @click="showUserDialog(scope.row.senderUserId)")
el-table-column(label="Action" width="80" align="right")
template(v-once #default="scope")
el-button(v-if="scope.row.type === 'friendRequest'" type="text" icon="el-icon-check" size="mini" @click="acceptNotification(scope.row)")
el-button(type="text" icon="el-icon-close" size="mini" @click="hideNotification(scope.row)")
//- more
- div(v-show="$refs.menu && $refs.menu.activeIndex === 'more'" class="x-container")
+ .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'more'")
div
span(style="font-weight:bold") VRCX
- div(class="x-friend-list" style="margin-top:10px")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Version
- span(class="extra" v-text="appVersion")
- div(class="x-friend-item" @click="checkAppVersion()")
- div(class="detail")
- span(class="name") Latest Version
- span(class="extra" v-if="latestAppVersion" v-text="latestAppVersion")
- span(v-else class="extra") Click to refresh
- div(class="x-friend-item" @click="openExternalLink('https://github.com/pypy-vrc/VRCX')")
- div(class="detail")
- span(class="name") Repository URL
- span(class="extra") https://github.com/pypy-vrc/VRCX
+ .x-friend-list(style="margin-top:10px")
+ .x-friend-item
+ .detail
+ span.name Version
+ span.extra(v-text="appVersion")
+ .x-friend-item(@click="checkAppVersion()")
+ .detail
+ span.name Latest Version
+ span.extra(v-if="latestAppVersion" v-text="latestAppVersion")
+ span.extra(v-else) Click to refresh
+ .x-friend-item(@click="openExternalLink('https://github.com/pypy-vrc/VRCX')")
+ .detail
+ span.name Repository URL
+ span.extra https://github.com/pypy-vrc/VRCX
div(style="margin-top:30px")
span(style="font-weight:bold") Direct Access
div(style="margin-top:5px")
@@ -388,17 +388,17 @@ html
el-button(size="small" @click="promptAvatarDialog()") Avatar
div(style="margin-top:30px")
span(style="font-weight:bold") My Profile
- div(class="x-friend-list" style="margin-top:10px")
- div(class="x-friend-item" @click="showUserDialog(API.currentUser.id)")
- div(class="avatar")
+ .x-friend-list(style="margin-top:10px")
+ .x-friend-item(@click="showUserDialog(API.currentUser.id)")
+ .avatar
img(v-lazy="API.currentUser.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(class="name" v-text="API.currentUser.displayName")
- span(class="extra" v-text="API.currentUser.username")
- div(class="x-friend-item" @click="showSocialStatusDialog()")
- div(class="detail")
- span(class="name") #[i(class="el-icon-edit")] Social Status
- span(class="extra")
+ .detail
+ span.name(v-text="API.currentUser.displayName")
+ span.extra(v-text="API.currentUser.username")
+ .x-friend-item(@click="showSocialStatusDialog()")
+ .detail
+ span.name #[i.el-icon-edit] Social Status
+ span.extra
el-tooltip(placement="top")
template(#content)
span(v-if="API.currentUser.status === 'active'") Online
@@ -406,54 +406,54 @@ html
span(v-else-if="API.currentUser.status === 'ask me'") Ask Me
span(v-else-if="API.currentUser.status === 'busy'") Do Not Disturb
span(v-else) Offline
- i(class="x-user-status" :class="userStatusClass(API.currentUser)")
+ i.x-user-status(:class="userStatusClass(API.currentUser)")
span(v-text="API.currentUser.statusDescription")
- div(class="x-friend-item" @click="showBioDialog()")
- div(class="detail")
- span(class="name") #[i(class="el-icon-edit")] Bio
- pre(class="extra" style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ API.currentUser.bio || '-' }}
+ .x-friend-item(@click="showBioDialog()")
+ .detail
+ span.name #[i.el-icon-edit] Bio
+ pre.extra(style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ API.currentUser.bio || '-' }}
div(style="margin-top:5px")
el-tooltip(v-for="(link, index) in API.currentUser.bioLinks" :key="index")
template(#content)
span(v-text="link")
img(:src="getFaviconUrl(link)" style="width:16px;height:16px;vertical-align:middle;margin-right:5px" @click.stop="openExternalLink(link)")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Languages
- span(class="extra")
+ .x-friend-item
+ .detail
+ span.name Languages
+ span.extra
div(style="margin:5px 0")
el-tag(v-for="item in API.currentUser.$languages" :key="item.key" size="small" type="info" effect="plain" closable @close="removeUserLanguage(item.key)" style="margin-right:5px")
- span(class="famfamfam-flags" :class="languageClass(item.key)" style="display:inline-block;margin-right:5px")
+ span.famfamfam-flags(:class="languageClass(item.key)" style="display:inline-block;margin-right:5px")
| {{ item.value }} ({{ item.key }})
div(v-if="userLanguageVisible")
el-select(v-model="userLanguageSelected" size="mini")
el-option(v-for="item in userLanguages" :key="item.key" :value="item.key" :label="item.value")
- span(class="famfamfam-flags" :class="languageClass(item.key)" style="display:inline-block;margin-right:5px")
+ span.famfamfam-flags(:class="languageClass(item.key)" style="display:inline-block;margin-right:5px")
| {{ item.value }} ({{ item.key }})
el-button(@click="userLanguageVisible=0; addUserLanguage(userLanguageSelected)" size="mini") Ok
el-button(@click="userLanguageVisible=0" size="mini" style="margin-left:0") Cancel
div(v-else)
el-button(@click="userLanguageSelected='';userLanguageVisible=1" size="mini") Add Language
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Last Login
- span(class="extra") {{ API.currentUser.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Two-Factor Auth (2FA)
- span(class="extra") {{ API.currentUser.twoFactorAuthEnabled ? 'Enabled' : 'Disabled' }}
- div(class="x-friend-item" @click="showUserDialog(API.currentUser.id)")
- div(class="detail")
- span(class="name") User ID
- span(class="extra" v-text="API.currentUser.id")
- div(class="x-friend-item" @click="showAvatarDialog(API.currentUser.currentAvatar)")
- div(class="detail")
- span(class="name") Avatar ID
- span(class="extra" v-text="API.currentUser.currentAvatar")
- div(class="x-friend-item" v-if="API.currentUser.homeLocation" @click="showWorldDialog(API.currentUser.homeLocation)")
- div(class="detail")
- span(class="name") Home Location
- span(class="extra")
+ .x-friend-item
+ .detail
+ span.name Last Login
+ span.extra {{ API.currentUser.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') }}
+ .x-friend-item
+ .detail
+ span.name Two-Factor Auth (2FA)
+ span.extra {{ API.currentUser.twoFactorAuthEnabled ? 'Enabled' : 'Disabled' }}
+ .x-friend-item(@click="showUserDialog(API.currentUser.id)")
+ .detail
+ span.name User ID
+ span.extra(v-text="API.currentUser.id")
+ .x-friend-item(@click="showAvatarDialog(API.currentUser.currentAvatar)")
+ .detail
+ span.name Avatar ID
+ span.extra(v-text="API.currentUser.currentAvatar")
+ .x-friend-item(v-if="API.currentUser.homeLocation" @click="showWorldDialog(API.currentUser.homeLocation)")
+ .detail
+ span.name Home Location
+ span.extra
location(:location="API.currentUser.homeLocation" :link="false")
el-button(@click.stop="resetHome()" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
div(style="margin-top:10px")
@@ -477,24 +477,24 @@ html
span(v-if="!scope.data.children" v-text="scope.data.value")
div(style="margin-top:30px")
span(style="font-weight:bold") Game Info
- div(class="x-friend-list" style="margin-top:10px")
- div(class="x-friend-item")
- div(class="detail" @click="API.getVisits()")
- span(class="name") Online Users
- span(v-if="visits" class="extra") {{visits}} users online.
- span(v-else class="extra") Click to refresh
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") SDK Unity Version
- span(class="extra" v-text="API.cachedConfig.sdkUnityVersion")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") SDK Version
- span(class="extra" v-text="API.cachedConfig.releaseSdkVersion")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") SDK URL
- span(class="extra" v-text="API.cachedConfig.releaseSdkUrl")
+ .x-friend-list(style="margin-top:10px")
+ .x-friend-item
+ .detail(@click="API.getVisits()")
+ span.name Online Users
+ span.extra(v-if="visits") {{visits}} users online.
+ span.extra(v-else) Click to refresh
+ .x-friend-item
+ .detail
+ span.name SDK Unity Version
+ span.extra(v-text="API.cachedConfig.sdkUnityVersion")
+ .x-friend-item
+ .detail
+ span.name SDK Version
+ span.extra(v-text="API.cachedConfig.releaseSdkVersion")
+ .x-friend-item
+ .detail
+ span.name SDK URL
+ span.extra(v-text="API.cachedConfig.releaseSdkUrl")
div(style="margin-top:30px")
span(style="font-weight:bold") Friends Sort Option
div(style="font-size:12px;margin-top:5px")
@@ -561,85 +561,85 @@ html
el-button(@click="ossDialog = true" size="small") Open Source Software Notice
//- friends
- div(class="x-aside-container")
+ .x-aside-container
el-select(v-model="quickSearch" clearable placeholder="Search" filterable remote :remote-method="quickSearchRemoteMethod" popper-class="x-quick-search" @change="quickSearchChange" @visible-change="quickSearchVisibleChange" style="flex:none;padding:10px")
el-option(v-for="item in quickSearchItems" :key="item.value" :value="item.value" :label="item.label")
- div(class="x-friend-item")
+ .x-friend-item
template(v-if="item.ref")
- div(class="detail")
- span(v-text="item.ref.displayName" class="name" :class="item.ref.$trustClass")
- location(:location="item.ref.location" :link="false" class="extra")
- img(v-lazy="item.ref.currentAvatarThumbnailImageUrl" class="avatar")
+ .detail
+ span.name(v-text="item.ref.displayName" :class="item.ref.$trustClass")
+ location.extra(:location="item.ref.location" :link="false")
+ img.avatar(v-lazy="item.ref.currentAvatarThumbnailImageUrl")
span(v-else) Search More: #[span(v-text="item.label" style="font-weight:bold")]
- div(class="x-friend-list" style="padding-bottom:10px")
- div(v-show="friendsGroup0.length" class="x-friend-group")
- i(class="el-icon-arrow-right" :class="{ rotate: isFriendsGroup0 }")
- span(@click="isFriendsGroup0 = !isFriendsGroup0" class="x-link" style="margin-left:5px") VIP―{{ friendsGroup0.length }}
+ .x-friend-list(style="padding-bottom:10px")
+ .x-friend-group(v-show="friendsGroup0.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup0 }")
+ span.x-link(@click="isFriendsGroup0 = !isFriendsGroup0" style="margin-left:5px") VIP―{{ friendsGroup0.length }}
div(v-show="isFriendsGroup0")
- div(v-for="friend in friendsGroup0" :key="friend.id" @click="showUserDialog(friend.id)" class="x-friend-item")
+ .x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" @click="showUserDialog(friend.id)")
template(v-if="friend.ref")
- div(class="avatar" :class="userStatusClass(friend.ref)")
+ .avatar(:class="userStatusClass(friend.ref)")
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-if="friend.memo" class="name" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
- span(v-else v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
- location(:location="friend.ref.location" :link="false" class="extra")
+ .detail
+ span.name(v-if="friend.memo" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
+ span.name(v-else v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
+ location.extra(:location="friend.ref.location" :link="false")
template(v-else)
span(v-text="friend.name || friend.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- div(v-show="friendsGroup1.length" class="x-friend-group")
- i(class="el-icon-arrow-right" :class="{ rotate: isFriendsGroup1 }")
- span(@click="isFriendsGroup1 = !isFriendsGroup1" class="x-link" style="margin-left:5px") ONLINE―{{ friendsGroup1.length }}
+ .x-friend-group(v-show="friendsGroup1.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup1 }")
+ span.x-link(@click="isFriendsGroup1 = !isFriendsGroup1" style="margin-left:5px") ONLINE―{{ friendsGroup1.length }}
div(v-show="isFriendsGroup1")
- div(v-for="friend in friendsGroup1" :key="friend.id" @click="showUserDialog(friend.id)" class="x-friend-item")
+ .x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" @click="showUserDialog(friend.id)")
template(v-if="friend.ref")
- div(class="avatar" :class="userStatusClass(friend.ref)")
+ .avatar(:class="userStatusClass(friend.ref)")
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-if="friend.memo" class="name" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
- span(v-else v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
- location(:location="friend.ref.location" :link="false" class="extra")
+ .detail
+ span.name(v-if="friend.memo" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
+ span.name(v-else v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
+ location.extra(:location="friend.ref.location" :link="false")
template(v-else)
span(v-text="friend.name || friend.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- div(v-show="friendsGroup2.length" class="x-friend-group")
- i(class="el-icon-arrow-right" :class="{ rotate: isFriendsGroup2 }")
- span(@click="isFriendsGroup2 = !isFriendsGroup2" class="x-link" style="margin-left:5px") ACTIVE―{{ friendsGroup2.length }}
+ .x-friend-group(v-show="friendsGroup2.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup2 }")
+ span.x-link(@click="isFriendsGroup2 = !isFriendsGroup2" style="margin-left:5px") ACTIVE―{{ friendsGroup2.length }}
div(v-show="isFriendsGroup2")
- div(v-for="friend in friendsGroup2" :key="friend.id" @click="showUserDialog(friend.id)" class="x-friend-item")
+ .x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" @click="showUserDialog(friend.id)")
template(v-if="friend.ref")
- div(class="avatar")
+ .avatar
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-if="friend.memo" class="name" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
- span(v-else v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
- span(v-text="friend.ref.statusDescription" :link="false" class="extra")
+ .detail
+ span.name(v-if="friend.memo" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
+ span.name(v-else v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
+ span.extra(v-text="friend.ref.statusDescription" :link="false")
template(v-else)
span(v-text="friend.name || friend.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- div(v-show="friendsGroup3.length" class="x-friend-group")
- i(class="el-icon-arrow-right" :class="{ rotate: isFriendsGroup3 }")
- span(@click="isFriendsGroup3 = !isFriendsGroup3" class="x-link" style="margin-left:5px") OFFLINE―{{ friendsGroup3.length }}
+ .x-friend-group(v-show="friendsGroup3.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup3 }")
+ span.x-link(@click="isFriendsGroup3 = !isFriendsGroup3" style="margin-left:5px") OFFLINE―{{ friendsGroup3.length }}
div(v-show="isFriendsGroup3")
- div(v-for="friend in friendsGroup3" :key="friend.id" @click="showUserDialog(friend.id)" class="x-friend-item")
+ .x-friend-item(v-for="friend in friendsGroup3" :key="friend.id" @click="showUserDialog(friend.id)")
template(v-if="friend.ref")
- div(class="avatar")
+ .avatar
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-if="friend.memo" class="name" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
- span(v-else v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
- span(v-text="friend.ref.statusDescription" class="extra")
+ .detail
+ span.name(v-if="friend.memo" :class="friend.ref.$trustClass") {{ friend.ref.displayName }} ({{ friend.memo }})
+ span.name(v-else v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
+ span.extra(v-text="friend.ref.statusDescription")
template(v-else)
span(v-text="friend.name || friend.id")
el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
//- dialog: user
- el-dialog(ref="userDialog" :visible.sync="userDialog.visible" :show-close="false" width="600px" class="x-dialog x-user-dialog")
+ el-dialog.x-dialog.x-user-dialog(ref="userDialog" :visible.sync="userDialog.visible" :show-close="false" width="600px")
div(v-loading="userDialog.loading")
div(style="display:flex")
el-popover(placement="right" width="500px" trigger="click")
img(v-lazy="userDialog.ref.currentAvatarThumbnailImageUrl" style="width:500px;height:375px")
- img(slot="reference" v-lazy="userDialog.ref.currentAvatarThumbnailImageUrl" class="x-link" style="flex:none;width:160px;height:120px;border-radius:4px")
+ img.x-link(slot="reference" v-lazy="userDialog.ref.currentAvatarThumbnailImageUrl" style="flex:none;width:160px;height:120px;border-radius:4px")
div(style="flex:1;display:flex;align-items:center;margin-left:15px")
div(style="flex:1")
div
@@ -651,7 +651,7 @@ html
span(v-else-if="userDialog.ref.status === 'ask me'") Ask Me
span(v-else-if="userDialog.ref.status === 'busy'") Do Not Disturb
span(v-else) Offline
- i(class="x-user-status" :class="userStatusClass(userDialog.ref)")
+ i.x-user-status(:class="userStatusClass(userDialog.ref)")
span(v-text="userDialog.ref.displayName" style="margin-left:5px;font-weight:bold")
el-popover(placement="top" trigger="click")
span(style="display:block;text-align:center;font-family:monospace") {{ userDialog.ref.username | textToHex }}
@@ -659,10 +659,10 @@ html
el-tooltip(v-for="item in userDialog.ref.$languages" :key="item.key" placement="top")
template(#content)
span {{ item.value }} ({{ item.key }})
- span(class="famfamfam-flags" :class="languageClass(item.key)" style="display:inline-block;margin-left:5px")
+ span.famfamfam-flags(:class="languageClass(item.key)" style="display:inline-block;margin-left:5px")
div(style="margin-top:5px")
- el-tag(type="info" effect="plain" size="mini" class="name" :class="userDialog.ref.$trustClass" v-text="userDialog.ref.$trustLevel")
- el-tag(v-if="userDialog.isFriend && userDialog.friend" type="info" effect="plain" size="mini" class="x-tag-friend") Friend No.{{userDialog.friend.no}}
+ el-tag.name(type="info" effect="plain" size="mini" :class="userDialog.ref.$trustClass" v-text="userDialog.ref.$trustLevel")
+ el-tag.x-tag-friend(v-if="userDialog.isFriend && userDialog.friend" type="info" effect="plain" size="mini") Friend No.{{userDialog.friend.no}}
div(style="margin-top:5px")
span(v-text="userDialog.ref.statusDescription" style="font-size:12px")
div(style="flex:none;margin-left:10px")
@@ -691,78 +691,78 @@ html
el-tab-pane(label="Info")
div(v-if="userDialog.ref.location" style="display:flex;flex-direction:column;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid #eee")
div(style="flex:none")
- i(class="el-icon-position")
+ i.el-icon-position
location(:location="userDialog.ref.location")
template(#default v-if="userDialog.instance.occupants") ({{ userDialog.instance.occupants }})
launch(:location="userDialog.ref.location" style="margin-left:5px")
- div(class="x-friend-list" style="flex:1;margin-top:10px")
- div(v-if="userDialog.$location.userId" @click="showUserDialog(userDialog.$location.userId)" class="x-friend-item")
+ .x-friend-list(style="flex:1;margin-top:10px")
+ .x-friend-item(v-if="userDialog.$location.userId" @click="showUserDialog(userDialog.$location.userId)")
template(v-if="userDialog.$location.user")
- div(class="avatar")
+ .avatar
img(v-lazy="userDialog.$location.user.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="userDialog.$location.user.displayName" class="name" :class="userDialog.$location.user.$trustClass")
- span(class="extra") Instance Creator
+ .detail
+ span.name(v-text="userDialog.$location.user.displayName" :class="userDialog.$location.user.$trustClass")
+ span.extra Instance Creator
span(v-else v-text="userDialog.$location.userId")
- div(v-for="user in userDialog.users" :key="user.id" @click="showUserDialog(user.id)" class="x-friend-item")
- div(class="avatar")
+ .x-friend-item(v-for="user in userDialog.users" :key="user.id" @click="showUserDialog(user.id)")
+ .avatar
img(v-lazy="user.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="user.displayName" class="name" :class="user.$trustClass")
- span(class="extra")
+ .detail
+ span.name(v-text="user.displayName" :class="user.$trustClass")
+ span.extra
timer(:epoch="user.$location_at")
- div(class="x-friend-list" style="max-height:none")
- div(class="x-friend-item" style="width:100%")
- div(class="detail")
- span(class="name") Note
- el-input(v-model="userDialog.memo" type="textarea" :rows="2" placeholder="Click to add a note" size="mini" resize="none" class="extra")
- div(class="x-friend-item" style="width:100%")
- div(class="detail")
- span(class="name") Bio
- pre(class="extra" style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ userDialog.ref.bio || '-' }}
+ .x-friend-list(style="max-height:none")
+ .x-friend-item(style="width:100%")
+ .detail
+ span.name Note
+ el-input.extra(v-model="userDialog.memo" type="textarea" :rows="2" placeholder="Click to add a note" size="mini" resize="none")
+ .x-friend-item(style="width:100%")
+ .detail
+ span.name Bio
+ pre.extra(style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ userDialog.ref.bio || '-' }}
div(style="margin-top:5px")
el-tooltip(v-for="(link, index) in userDialog.ref.bioLinks" :key="index")
template(#content)
span(v-text="link")
img(:src="getFaviconUrl(link)" style="width:16px;height:16px;vertical-align:middle;margin-right:5px" @click.stop="openExternalLink(link)")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Avatar Copying
- span(class="extra" v-if="userDialog.ref.allowAvatarCopying" style="color:#67C23A") Allow
- span(class="extra" v-else style="color:#F56C6C") Deny
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Last Login
- span(class="extra") {{ userDialog.ref.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Last Platform
- span(class="extra" v-text="userDialog.ref.last_platform")
+ .x-friend-item
+ .detail
+ span.name Avatar Copying
+ span.extra(v-if="userDialog.ref.allowAvatarCopying" style="color:#67C23A") Allow
+ span.extra(v-else style="color:#F56C6C") Deny
+ .x-friend-item
+ .detail
+ span.name Last Login
+ span.extra {{ userDialog.ref.last_login | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
+ .x-friend-item
+ .detail
+ span.name Last Platform
+ span.extra(v-text="userDialog.ref.last_platform")
el-tab-pane(label="Worlds")
el-button(type="default" :loading="userDialog.isWorldsLoading" @click="refreshUserDialogWorlds()" size="mini" icon="el-icon-refresh" circle)
span(style="margin-left:5px") Total {{ userDialog.worlds.length }}
el-radio-group(v-model="userDialog.worldSorting" size="mini" style="margin-left:30px" @change="changeUserDialogWorldSorting")
el-radio(label="name") by name
el-radio(label="update") by update
- div(v-loading="userDialog.isWorldsLoading" class="x-friend-list" style="margin-top:10px;min-height:60px")
- div(v-for="world in userDialog.worlds" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item")
- div(class="avatar")
+ .x-friend-list(v-loading="userDialog.isWorldsLoading" style="margin-top:10px;min-height:60px")
+ .x-friend-item(v-for="world in userDialog.worlds" :key="world.id" @click="showWorldDialog(world.id)")
+ .avatar
img(v-lazy="world.thumbnailImageUrl")
- div(class="detail")
- span(v-text="world.name" class="name")
- span(v-if="world.occupants" class="extra") ({{ world.occupants }})
+ .detail
+ span.name(v-text="world.name")
+ span.extra(v-if="world.occupants") ({{ world.occupants }})
el-tab-pane(label="Avatars")
el-button(type="default" :loading="userDialog.isAvatarsLoading" @click="refreshUserDialogAvatars()" size="mini" icon="el-icon-refresh" circle)
span(style="margin-left:5px") Total {{ userDialog.avatars.length }}
el-radio-group(v-model="userDialog.avatarSorting" size="mini" style="margin-left:30px" @change="changeUserDialogAvatarSorting")
el-radio(label="name") by name
el-radio(label="update") by update
- div(v-loading="userDialog.isAvatarsLoading" class="x-friend-list" style="margin-top:10px;min-height:60px")
- div(v-for="avatar in userDialog.avatars" :key="avatar.id" @click="showAvatarDialog(avatar.id)" class="x-friend-item")
- div(class="avatar")
+ .x-friend-list(v-loading="userDialog.isAvatarsLoading" style="margin-top:10px;min-height:60px")
+ .x-friend-item(v-for="avatar in userDialog.avatars" :key="avatar.id" @click="showAvatarDialog(avatar.id)")
+ .avatar
img(v-lazy="avatar.thumbnailImageUrl")
- div(class="detail")
- span(v-text="avatar.name" class="name")
+ .detail
+ span.name(v-text="avatar.name")
el-tab-pane(label="JSON")
el-button(type="default" @click="refreshUserDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
el-tree(:data="userDialog.treeData" style="margin-top:5px;font-size:12px")
@@ -772,19 +772,19 @@ html
span(v-if="!scope.data.children" v-text="scope.data.value")
//- dialog: world
- el-dialog(ref="worldDialog" :visible.sync="worldDialog.visible" :show-close="false" width="600px" class="x-dialog x-world-dialog")
+ el-dialog.x-dialog.x-world-dialog(ref="worldDialog" :visible.sync="worldDialog.visible" :show-close="false" width="600px")
div(v-loading="worldDialog.loading")
div(style="display:flex")
el-popover(placement="right" width="500px" trigger="click")
img(v-lazy="worldDialog.ref.thumbnailImageUrl" style="width:500px;height:375px")
- img(slot="reference" v-lazy="worldDialog.ref.thumbnailImageUrl" class="x-link" style="flex:none;width:160px;height:120px;border-radius:4px")
+ img.x-link(slot="reference" v-lazy="worldDialog.ref.thumbnailImageUrl" style="flex:none;width:160px;height:120px;border-radius:4px")
div(style="flex:1;display:flex;align-items:center;margin-left:15px")
div(style="flex:1")
div
- i(class="el-icon-s-home" v-show="API.currentUser.$homeLocation && API.currentUser.$homeLocation.worldId === worldDialog.id")
+ i.el-icon-s-home(v-show="API.currentUser.$homeLocation && API.currentUser.$homeLocation.worldId === worldDialog.id")
span(v-text="worldDialog.ref.name" style="font-weight:bold")
div(style="margin-top:5px")
- span(v-text="worldDialog.ref.authorName" @click="showUserDialog(worldDialog.ref.authorId)" class="x-link" style="color:#909399;font-family:monospace")
+ span.x-link(v-text="worldDialog.ref.authorName" @click="showUserDialog(worldDialog.ref.authorId)" style="color:#909399;font-family:monospace")
div(style="margin-top:5px")
el-tag(v-if="worldDialog.ref.$isLabs" type="primary" effect="plain" size="mini") Labs
el-tag(v-else-if="worldDialog.ref.releaseStatus === 'public'" type="success" effect="plain" size="mini") Public
@@ -804,71 +804,72 @@ html
el-tabs
el-tab-pane(label="Instances")
div(style="margin-bottom:10px").
- #[i(class="el-icon-user")] Public {{ worldDialog.ref.publicOccupants | commaNumber }}
- #[i(class="el-icon-user-solid" style="margin-left:10px")] Private {{ worldDialog.ref.privateOccupants | commaNumber }}
- #[i(class="el-icon-check" style="margin-left:10px")] Capacity {{ worldDialog.ref.capacity | commaNumber }}
+ #[i.el-icon-user] Public {{ worldDialog.ref.publicOccupants | commaNumber }}
+ #[i.el-icon-user-solid(style="margin-left:10px")] Private {{ worldDialog.ref.privateOccupants | commaNumber }}
+ #[i.el-icon-check(style="margin-left:10px")] Capacity {{ worldDialog.ref.capacity | commaNumber }}
div(v-for="room in worldDialog.rooms" :key="room.id")
div
- i(class="el-icon-position")
- span(@click="showLaunchDialog(room.$location.tag)" class="x-link") \#{{ room.$location.instanceName }} {{ room.$location.accessType }} #[template(v-if="room.occupants") ({{ room.occupants }})]
- div(class="x-friend-list" style="margin:10px 0")
- div(v-if="room.$location.userId" @click="showUserDialog(room.$location.userId)" class="x-friend-item")
+ i.el-icon-position
+ span.x-link(@click="showLaunchDialog(room.$location.tag)").
+ \#{{ room.$location.instanceName }} {{ room.$location.accessType }} #[template(v-if="room.occupants") ({{ room.occupants }})]
+ .x-friend-list(style="margin:10px 0")
+ .x-friend-item(v-if="room.$location.userId" @click="showUserDialog(room.$location.userId)")
template(v-if="room.$location.user")
- div(class="avatar")
+ .avatar
img(v-lazy="room.$location.user.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="room.$location.user.displayName" class="name" :class="room.$location.user.$trustClass")
- span(class="extra") Instance Creator
+ .detail
+ span.name(v-text="room.$location.user.displayName" :class="room.$location.user.$trustClass")
+ span.extra Instance Creator
span(v-else v-text="room.$location.userId")
- div(v-for="user in room.users" :key="user.id" @click="showUserDialog(user.id)" class="x-friend-item")
- div(class="avatar")
+ .x-friend-item(v-for="user in room.users" :key="user.id" @click="showUserDialog(user.id)")
+ .avatar
img(v-lazy="user.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="user.displayName" class="name" :class="user.$trustClass")
- span(class="extra")
+ .detail
+ span.name(v-text="user.displayName" :class="user.$trustClass")
+ span.extra
timer(:epoch="user.$location_at")
el-tab-pane(label="Info")
- div(class="x-friend-list" style="max-height:none")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Players
- span(class="extra") {{ worldDialog.ref.occupants | commaNumber }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Favorites
- span(class="extra") {{ worldDialog.ref.favorites | commaNumber }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Visits
- span(class="extra") {{ worldDialog.ref.visits | commaNumber }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Capacity
- span(class="extra" v-text="worldDialog.ref.capacity")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Heat
- span(class="extra") {{ worldDialog.ref.heat | commaNumber }} {{ '🔥'.repeat(worldDialog.ref.heat) }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Popularity
- span(class="extra") {{ worldDialog.ref.popularity | commaNumber }} {{ '💖'.repeat(worldDialog.ref.popularity) }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Created
- span(class="extra") {{ worldDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Last Updated
- span(class="extra") {{ worldDialog.fileCreatedAt | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Version
- span(class="extra" v-text="worldDialog.ref.version")
- div(class="x-friend-item" style="width:100%")
- div(class="detail")
- span(class="name") Platform
- span(class="extra" v-text="worldDialogPlatform")
+ .x-friend-list(style="max-height:none")
+ .x-friend-item
+ .detail
+ span.name Players
+ span.extra {{ worldDialog.ref.occupants | commaNumber }}
+ .x-friend-item
+ .detail
+ span.name Favorites
+ span.extra {{ worldDialog.ref.favorites | commaNumber }}
+ .x-friend-item
+ .detail
+ span.name Visits
+ span.extra {{ worldDialog.ref.visits | commaNumber }}
+ .x-friend-item
+ .detail
+ span.name Capacity
+ span.extra(v-text="worldDialog.ref.capacity")
+ .x-friend-item
+ .detail
+ span.name Heat
+ span.extra {{ worldDialog.ref.heat | commaNumber }} {{ '🔥'.repeat(worldDialog.ref.heat) }}
+ .x-friend-item
+ .detail
+ span.name Popularity
+ span.extra {{ worldDialog.ref.popularity | commaNumber }} {{ '💖'.repeat(worldDialog.ref.popularity) }}
+ .x-friend-item
+ .detail
+ span.name Created
+ span.extra {{ worldDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
+ .x-friend-item
+ .detail
+ span.name Last Updated
+ span.extra {{ worldDialog.fileCreatedAt | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
+ .x-friend-item
+ .detail
+ span.name Version
+ span.extra(v-text="worldDialog.ref.version")
+ .x-friend-item(style="width:100%")
+ .detail
+ span.name Platform
+ span.extra(v-text="worldDialogPlatform")
el-tab-pane(label="JSON")
el-button(type="default" @click="refreshWorldDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
el-tree(:data="worldDialog.treeData" style="margin-top:5px;font-size:12px")
@@ -878,18 +879,18 @@ html
span(v-if="!scope.data.children" v-text="scope.data.value")
//- dialog: avatar
- el-dialog(ref="avatarDialog" :visible.sync="avatarDialog.visible" :show-close="false" width="600px" class="x-dialog x-avatar-dialog")
+ el-dialog.x-dialog.x-avatar-dialog(ref="avatarDialog" :visible.sync="avatarDialog.visible" :show-close="false" width="600px")
div(v-loading="avatarDialog.loading")
div(style="display:flex")
el-popover(placement="right" width="500px" trigger="click")
img(v-lazy="avatarDialog.ref.thumbnailImageUrl" style="width:500px;height:375px")
- img(slot="reference" v-lazy="avatarDialog.ref.thumbnailImageUrl" class="x-link" style="flex:none;width:160px;height:120px;border-radius:4px")
+ img.x-link(slot="reference" v-lazy="avatarDialog.ref.thumbnailImageUrl" style="flex:none;width:160px;height:120px;border-radius:4px")
div(style="flex:1;display:flex;align-items:center;margin-left:15px")
div(style="flex:1")
div
span(v-text="avatarDialog.ref.name" style="font-weight:bold")
div(style="margin-top:5px")
- span(v-text="avatarDialog.ref.authorName" @click="showUserDialog(avatarDialog.ref.authorId)" class="x-link" style="color:#909399;font-family:monospace")
+ span.x-link(v-text="avatarDialog.ref.authorName" @click="showUserDialog(avatarDialog.ref.authorId)" style="color:#909399;font-family:monospace")
div(style="margin-top:5px")
el-tag(v-if="avatarDialog.ref.releaseStatus === 'public'" type="success" effect="plain" size="mini") Public
el-tag(v-else type="danger" effect="plain" size="mini") Private
@@ -905,23 +906,23 @@ html
el-dropdown-item(icon="el-icon-check" command="Select Avatar") Select Avatar
el-tabs
el-tab-pane(label="Info")
- div(class="x-friend-list")
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Created
- span(class="extra") {{ avatarDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Last Updated
- span(class="extra") {{ avatarDialog.fileCreatedAt | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
- div(class="x-friend-item")
- div(class="detail")
- span(class="name") Version
- span(class="extra" v-text="avatarDialog.ref.version")
- div(class="x-friend-item" style="width:100%")
- div(class="detail")
- span(class="name") Platform
- span(class="extra" v-text="avatarDialogPlatform")
+ .x-friend-list
+ .x-friend-item
+ .detail
+ span.name Created
+ span.extra {{ avatarDialog.ref.created_at | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
+ .x-friend-item
+ .detail
+ span.name Last Updated
+ span.extra {{ avatarDialog.fileCreatedAt | formatDate('YYYY-MM-DD HH24:MI:SS') || '-' }}
+ .x-friend-item
+ .detail
+ span.name Version
+ span.extra(v-text="avatarDialog.ref.version")
+ .x-friend-item(style="width:100%")
+ .detail
+ span.name Platform
+ span.extra(v-text="avatarDialogPlatform")
el-tab-pane(label="JSON")
el-button(type="default" @click="refreshAvatarDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
el-tree(:data="avatarDialog.treeData" style="margin-top:5px;font-size:12px")
@@ -931,63 +932,63 @@ html
span(v-if="!scope.data.children" v-text="scope.data.value")
//- dialog: favorite
- el-dialog(ref="favoriteDialog" :visible.sync="favoriteDialog.visible" title="Choose Group" width="250px" class="x-dialog")
+ el-dialog.x-dialog(ref="favoriteDialog" :visible.sync="favoriteDialog.visible" title="Choose Group" width="250px")
div(v-loading="favoriteDialog.loading")
el-button(v-for="group in favoriteDialog.groups" :key="group.name" style="display:block;width:100%;margin:10px 0" @click="addFavorite(group)" :disabled="group.count >= group.capacity") {{ group.displayName }} ({{ group.count }} / {{ group.capacity }})
//- dialog: invite
- el-dialog(ref="inviteDialog" :visible.sync="inviteDialog.visible" title="Invite" width="450px" class="x-dialog")
+ el-dialog.x-dialog(ref="inviteDialog" :visible.sync="inviteDialog.visible" title="Invite" width="450px")
div(v-loading="inviteDialog.loading")
location(:location="inviteDialog.worldId" :link="false")
el-select(v-model="inviteDialog.userIds" multiple clearable placeholder="Choose Friends" filterable :disabled="inviteDialog.loading" style="width:100%;margin-top:15px")
el-option-group(v-if="API.currentUser" label="ME")
- el-option(:label="API.currentUser.displayName" :value="API.currentUser.id" class="x-friend-item" style="height:auto")
- div(class="avatar" :class="userStatusClass(API.currentUser)")
+ el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto")
+ .avatar(:class="userStatusClass(API.currentUser)")
img(v-lazy="API.currentUser.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="API.currentUser.displayName" class="name")
+ .detail
+ span.name(v-text="API.currentUser.displayName")
el-option-group(v-if="friendsGroup0.length" label="VIP")
- el-option(v-for="friend in friendsGroup0" :key="friend.id" :label="friend.name" :value="friend.id" class="x-friend-item" style="height:auto")
+ el-option.x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
template(v-if="friend.ref")
- div(class="avatar" :class="userStatusClass(friend.ref)")
+ .avatar(:class="userStatusClass(friend.ref)")
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
+ .detail
+ span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
span(v-else v-text="friend.id")
el-option-group(v-if="friendsGroup1.length" label="ONLINE")
- el-option(v-for="friend in friendsGroup1" :key="friend.id" :label="friend.name" :value="friend.id" class="x-friend-item" style="height:auto")
+ el-option.x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
template(v-if="friend.ref")
- div(class="avatar" :class="userStatusClass(friend.ref)")
+ .avatar(:class="userStatusClass(friend.ref)")
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
+ .detail
+ span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
span(v-else v-text="friend.id")
el-option-group(v-if="friendsGroup2.length" label="ACTIVE")
- el-option(v-for="friend in friendsGroup2" :key="friend.id" :label="friend.name" :value="friend.id" class="x-friend-item" style="height:auto")
+ el-option.x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
template(v-if="friend.ref")
- div(class="avatar")
+ .avatar
img(v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
- div(class="detail")
- span(v-text="friend.ref.displayName" class="name" :class="friend.ref.$trustClass")
+ .detail
+ span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustClass")
span(v-else v-text="friend.id")
template(#footer)
el-button(type="primary" size="small" :disabled="inviteDialog.loading || !inviteDialog.userIds.length" @click="sendInvite()") Invite
//- dialog: social status
- el-dialog(ref="socialStatusDialog" :visible.sync="socialStatusDialog.visible" title="Social Status" width="400px" class="x-dialog")
+ el-dialog.x-dialog(ref="socialStatusDialog" :visible.sync="socialStatusDialog.visible" title="Social Status" width="400px")
el-row(v-loading="socialStatusDialog.loading")
el-col(:span="9")
el-select(v-model="socialStatusDialog.status")
el-option(label="Online" value="active").
- #[i(class="x-user-status active")] Online
+ #[i.x-user-status active] Online
el-option(label="Join Me" value="join me").
- #[i(class="x-user-status joinme")] Join Me
+ #[i.x-user-status joinme] Join Me
el-option(label="Ask Me" value="ask me").
- #[i(class="x-user-status askme")] Ask Me
+ #[i.x-user-status askme] Ask Me
el-option(label="Do Not Disturb" value="busy").
- #[i(class="x-user-status busy")] Do Not Disturb
+ #[i.x-user-status busy] Do Not Disturb
el-option(label="Offline" value="offline").
- #[i(class="x-user-status offline")] Offline
+ #[i.x-user-status offline] Offline
el-col(:span="1")
el-col(:span="14")
el-input(v-model="socialStatusDialog.statusDescription" placeholder="Status")
@@ -995,7 +996,7 @@ html
el-button(type="primary" size="small" :disabled="socialStatusDialog.loading" @click="saveSocialStatus") Update
//- dialog: bio
- el-dialog(ref="bioDialog" :visible.sync="bioDialog.visible" title="Bio" width="400px" class="x-dialog")
+ el-dialog.x-dialog(ref="bioDialog" :visible.sync="bioDialog.visible" title="Bio" width="400px")
el-input(type="textarea" v-model="bioDialog.bio" size="mini" maxlength="512" show-word-limit :autosize="{ minRows:2, maxRows:5 }" placeholder="Please input a bio")
el-input(v-for="(link, index) in bioDialog.bioLinks" :key="index" :value="link" v-model="bioDialog.bioLinks[index]" size="small" style="margin-top:5px")
img(slot="prepend" :src="getFaviconUrl(link)" style="width:16px;height:16px")
@@ -1005,7 +1006,7 @@ html
el-button(type="primary" size="small" :disabled="bioDialog.loading" @click="saveBio") Update
//- dialog: new instance
- el-dialog(ref="newInstanceDialog" :visible.sync="newInstanceDialog.visible" title="New Instance" width="600px" class="x-dialog")
+ el-dialog.x-dialog(ref="newInstanceDialog" :visible.sync="newInstanceDialog.visible" title="New Instance" width="600px")
el-form(:model="newInstanceDialog" label-width="100px")
el-form-item(label="Access Type")
el-radio-group(v-model="newInstanceDialog.accessType" size="mini" @change="buildInstance")
@@ -1028,7 +1029,7 @@ html
el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location)") Launch
//- dialog: launch
- el-dialog(ref="launchDialog" :visible.sync="launchDialog.visible" title="Launch" width="400px" class="x-dialog")
+ el-dialog.x-dialog(ref="launchDialog" :visible.sync="launchDialog.visible" title="Launch" width="400px")
div #[span(v-text="launchDialog.url" style="word-break:break-all;font-size:12px")]
template(#footer)
el-checkbox(v-model="launchDialog.desktop" style="float:left;margin-top:5px") Start as Desktop (No VR)
@@ -1036,286 +1037,286 @@ html
el-button(type="primary" size="small" @click="launchGame()") Launch
//- dialog: open source software notice
- el-dialog(:visible.sync="ossDialog" title="Open Source Software Notice" width="650px" class="x-dialog")
+ el-dialog.x-dialog(:visible.sync="ossDialog" title="Open Source Software Notice" width="650px")
div(style="height:350px;overflow:hidden scroll;word-break:break-all")
div
span VRCX is based on open source software. It was possible because of their contribution.
div(style="margin-top:15px")
p(style="font-weight:bold") animate.css
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2019 Daniel Eden
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all
- | copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- | SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2019 Daniel Eden
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") CefSharp
- pre(style="font-size:12px;white-space:pre-line")
- | // Copyright © The CefSharp Authors. All rights reserved.
- | //
- | // Redistribution and use in source and binary forms, with or without
- | // modification, are permitted provided that the following conditions are
- | // met:
- | //
- | // * Redistributions of source code must retain the above copyright
- | // notice, this list of conditions and the following disclaimer.
- | //
- | // * Redistributions in binary form must reproduce the above
- | // copyright notice, this list of conditions and the following disclaimer
- | // in the documentation and/or other materials provided with the
- | // distribution.
- | //
- | // * Neither the name of Google Inc. nor the name Chromium Embedded
- | // Framework nor the name CefSharp nor the names of its contributors
- | // may be used to endorse or promote products derived from this software
- | // without specific prior written permission.
- | //
- | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ pre(style="font-size:12px;white-space:pre-line").
+ // Copyright © The CefSharp Authors. All rights reserved.
+ //
+ // Redistribution and use in source and binary forms, with or without
+ // modification, are permitted provided that the following conditions are
+ // met:
+ //
+ // * Redistributions of source code must retain the above copyright
+ // notice, this list of conditions and the following disclaimer.
+ //
+ // * Redistributions in binary form must reproduce the above
+ // copyright notice, this list of conditions and the following disclaimer
+ // in the documentation and/or other materials provided with the
+ // distribution.
+ //
+ // * Neither the name of Google Inc. nor the name Chromium Embedded
+ // Framework nor the name CefSharp nor the names of its contributors
+ // may be used to endorse or promote products derived from this software
+ // without specific prior written permission.
+ //
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
div(style="margin-top:15px")
p(style="font-weight:bold") DiscordRichPresence
- pre(style="font-size:12px;white-space:pre-line")
- | MIT License
- |
- | Copyright (c) 2018 Lachee
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all
- | copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- | SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ MIT License
+
+ Copyright (c) 2018 Lachee
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") element
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2016-present ElemeFE
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all
- | copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- | SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2016-present ElemeFE
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") Newtonsoft.Json
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2007 James Newton-King
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2007 James Newton-King
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") normalize
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright © Nicolas Gallagher and Jonathan Neal
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright © Nicolas Gallagher and Jonathan Neal
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") noty
- pre(style="font-size:12px;white-space:pre-line")
- | Copyright (c) 2012 Nedim Arabacı
- |
- | Permission is hereby granted, free of charge, to any person obtaining
- | a copy of this software and associated documentation files (the
- | "Software"), to deal in the Software without restriction, including
- | without limitation the rights to use, copy, modify, merge, publish,
- | distribute, sublicense, and/or sell copies of the Software, and to
- | permit persons to whom the Software is furnished to do so, subject to
- | the following conditions:
- |
- | The above copyright notice and this permission notice shall be
- | included in all copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ Copyright (c) 2012 Nedim Arabacı
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") OpenVR SDK
- pre(style="font-size:12px;white-space:pre-line")
- | Copyright (c) 2015, Valve Corporation
- | All rights reserved.
- |
- | Redistribution and use in source and binary forms, with or without modification,
- | are permitted provided that the following conditions are met:
- |
- | 1. Redistributions of source code must retain the above copyright notice, this
- | list of conditions and the following disclaimer.
- |
- | 2. Redistributions in binary form must reproduce the above copyright notice,
- | this list of conditions and the following disclaimer in the documentation and/or
- | other materials provided with the distribution.
- |
- | 3. Neither the name of the copyright holder nor the names of its contributors
- | may be used to endorse or promote products derived from this software without
- | specific prior written permission.
- |
- | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ pre(style="font-size:12px;white-space:pre-line").
+ Copyright (c) 2015, Valve Corporation
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
div(style="margin-top:15px")
p(style="font-weight:bold") SharpDX
- pre(style="font-size:12px;white-space:pre-line")
- | Copyright (c) 2010-2014 SharpDX - Alexandre Mutel
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in
- | all copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- | THE SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ Copyright (c) 2010-2014 SharpDX - Alexandre Mutel
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") vue
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2013-present, Yuxi (Evan) You
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in
- | all copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- | THE SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2013-present, Yuxi (Evan) You
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") vue-data-tables
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2018 Leon Zhang
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all
- | copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- | SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2018 Leon Zhang
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
div(style="margin-top:15px")
p(style="font-weight:bold") vue-lazyload
- pre(style="font-size:12px;white-space:pre-line")
- | The MIT License (MIT)
- |
- | Copyright (c) 2016 Awe
- |
- | Permission is hereby granted, free of charge, to any person obtaining a copy
- | of this software and associated documentation files (the "Software"), to deal
- | in the Software without restriction, including without limitation the rights
- | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- | copies of the Software, and to permit persons to whom the Software is
- | furnished to do so, subject to the following conditions:
- |
- | The above copyright notice and this permission notice shall be included in all
- | copies or substantial portions of the Software.
- |
- | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- | SOFTWARE.
+ pre(style="font-size:12px;white-space:pre-line").
+ The MIT License (MIT)
+
+ Copyright (c) 2016 Awe
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
script(src="https://cdnjs.cloudflare.com/ajax/libs/noty/3.2.0-beta/noty.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/vue-lazyload/1.3.3/vue-lazyload.js")