Compare commits

..

No commits in common. "master" and "settings" have entirely different histories.

53 changed files with 13359 additions and 3403 deletions

8
.env
View file

@ -1,9 +1,7 @@
VUE_APP_API_ENDPOINT=/api/ VUE_APP_APIENDPOINT=/api/
VUE_APP_API_VERSION=v2 VUE_APP_APIVERSION=v1
VUE_APP_GATEWAY_ENDPOINT=/socket.io/ VUE_APP_GATEWAYENDPOINT=/socket.io/
VUE_APP_STAGING=true VUE_APP_STAGING=true
VUE_APP_I18N_LOCALE=en VUE_APP_I18N_LOCALE=en
VUE_APP_I18N_FALLBACK_LOCALE=en VUE_APP_I18N_FALLBACK_LOCALE=en
VUE_APP_RELEASE="Canary" VUE_APP_RELEASE="Canary"
VUE_APP_VERSION=[AIV]{version}[/AIV]
VUE_APP_BUILD_DATE=[AIV]{date}[/AIV]

View file

@ -1,5 +1,5 @@
VUE_APP_API_ENDPOINT="/api/" VUE_APP_APIENDPOINT="/api/"
VUE_APP_API_VERSION="v2" VUE_APP_APIVERSION="v1"
VUE_APP_GATEWAY_ENDPOINT="/socket.io/" VUE_APP_GATEWAYENDPOINT="/socket.io/"
VUE_APP_STAGING=true VUE_APP_STAGING=true
VUE_APP_RELEASE="Canary" VUE_APP_RELEASE="Canary"

3
.gitignore vendored
View file

@ -28,6 +28,3 @@ pnpm-debug.log*
# Yarn and NPM # Yarn and NPM
.yarn .yarn
# Vue
vue.config.js

View file

@ -1,6 +1,6 @@
{ {
"name": "kaverti-frontend", "name": "kaverti-frontend",
"version": "1.0.0", "version": "",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
@ -32,8 +32,7 @@
"vue-nprogress": "^0.2.0", "vue-nprogress": "^0.2.0",
"vue-router": "^3.2.0", "vue-router": "^3.2.0",
"vue-socket.io": "^3.0.10", "vue-socket.io": "^3.0.10",
"vuex": "^3.4.0", "vuex": "^3.4.0"
"webpack-auto-inject-version": "^1.2.2"
}, },
"devDependencies": { "devDependencies": {
"@intlify/vue-i18n-loader": "^1.0.0", "@intlify/vue-i18n-loader": "^1.0.0",

View file

@ -1,41 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="/favicon.ico">
<title>Kaverti</title>
<meta name="title" content="Kaverti">
<meta name="description" content="Kaverti allows you to chat, and socialize on our platform, with our ever expanding platform, and our gaming platform will allow users to create games, and avatars with user created items from our virtual Marketplace.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://kaverti.com">
<meta property="og:title" content="Kaverti">
<meta property="og:description" content="Kaverti allows you to chat, and socialize on our platform, with our ever expanding platform, and our gaming platform will allow users to create games, and avatars with user created items from our virtual Marketplace.">
<meta property="og:image" content="https://cdn.kaverti.com/opengraph-image.png">
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://kaverti.com">
<meta property="twitter:title" content="Kaverti">
<meta property="twitter:description" content="Kaverti allows you to chat, and socialize on our platform, with our ever expanding platform, and our gaming platform will allow users to create games, and avatars with user created items from our virtual Marketplace.">
<meta property="twitter:image" content="https://cdn.kaverti.com/opengraph-image.png">
<script src="https://polyfill.io/v3/polyfill.min.js?features=es2015%2Ces2016%2Ces2018%2Ces2019%2Ces2017%2Ces6%2Ces5%2Ces7%2Cdefault%2CIntl%2Cblissfuljs"></script>
<script>
function isIE() {
ua = navigator.userAgent;
var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
return is_ie;
}
if (isIE()){
document.write('<h2>Kaverti ne supporte pas Internet Explorer et ne planifions pas de supporter le navigateur. Veuillez mettre à niveau vers un navigateur plus moderne.</h2>');
}
</script>
</head>
<body>
<noscript>
<strong>Désolé, mais Kaverti ne marche pas sans Javascript, veuillez l'activer.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

View file

@ -7,7 +7,9 @@
<Footer /> <Footer />
</div> </div>
</template> </template>
<style>
@import './assets/css/kaverti.css';
</style>
<script> <script>
import Navbar from "./components/Navbar"; import Navbar from "./components/Navbar";
import Footer from "./components/Footer"; import Footer from "./components/Footer";
@ -25,12 +27,15 @@ export default {
} }
if (JSON.parse(localStorage.getItem("wind404"))) { if (JSON.parse(localStorage.getItem("wind404"))) {
var wind = JSON.parse(localStorage.getItem("wind404")); var wind = JSON.parse(localStorage.getItem("wind404"));
} else {
// eslint-disable-next-line no-redeclare
var wind = false;
} }
this.$store.commit("setWind", wind); this.$store.commit("setWind", wind);
Object.assign(axios.defaults, { Object.assign(axios.defaults, {
headers: { Authorization: this.$store.state.user.token }, headers: { Authorization: this.$store.state.user.token },
}); });
if (this.$store.state.client.development) { if (this.$store.state.debug) {
this.$buefy.snackbar.open({ this.$buefy.snackbar.open({
message: this.$t("errors.devBuild"), message: this.$t("errors.devBuild"),
type: "is-warning", type: "is-warning",
@ -38,8 +43,8 @@ export default {
} }
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"userinfo" "userinfo"
) )
@ -54,14 +59,18 @@ export default {
this.$store.commit("setDescription", res.data.description); this.$store.commit("setDescription", res.data.description);
this.$store.commit("setExecutive", res.data.executive); this.$store.commit("setExecutive", res.data.executive);
}) })
if (this.$store.state.user.username) { .catch(() => {
this.$buefy.snackbar.open({
message: this.$t("errors.down"),
type: "is-warning",
});
});
this.axios.get( this.axios.get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"awards/eligibility" "awards/eligibility"
) );
}
}, },
}; };
</script> </script>
@ -72,6 +81,5 @@ export default {
</style> </style>
<style lang="css"> <style lang="css">
@import "./assets/css/kaverti.css";
@import "https://kit-pro.fontawesome.com/releases/v5.15.1/css/pro.min.css"; @import "https://kit-pro.fontawesome.com/releases/v5.15.1/css/pro.min.css";
</style> </style>

View file

@ -5,11 +5,7 @@
} }
main { main {
flex: 1 !important; flex: 1 !important
}
.container {
max-width: 960px !important;
} }
.large-icon { .large-icon {
@ -24,7 +20,3 @@ main {
-ms-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.navbar {
border-bottom: 2px solid #e5e5e5;
}

View file

@ -49,7 +49,7 @@ export default {
replaceLink(cached, link); replaceLink(cached, link);
} else { } else {
Vue.axios Vue.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'forums/link_preview?url=' + link.href) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'forums/link_preview?url=' + link.href)
.then(res => { .then(res => {
cache[link.href] = res.data; cache[link.href] = res.data;
replaceLink(res.data, link); replaceLink(res.data, link);

View file

@ -45,8 +45,7 @@
<b-tag v-if="system" class="is-success" rounded>{{ $t('badges.system') }}</b-tag>&nbsp; <b-tag v-if="system" class="is-success" rounded>{{ $t('badges.system') }}</b-tag>&nbsp;
<b-tag v-if="hidden" rounded>{{ $t('badges.hidden') }}</b-tag>&nbsp; <b-tag v-if="hidden" rounded>{{ $t('badges.hidden') }}</b-tag>&nbsp;
<b-tag v-if="verified" rounded><i class="fas fa-check"></i>&nbsp;Verified</b-tag> <b-tag v-if="verified" rounded><i class="fas fa-check"></i>&nbsp;Verified</b-tag>
<b-button @click="modal(user)" v-if="$store.state.user.admin & user" class="is-info tag" rounded><i class="fas fa-plus"></i></b-button> <b-button @click="modal()" v-if="$store.state.user.admin & !noPlus" class="is-info tag" rounded><i class="fas fa-plus"></i></b-button>
<b-button @click="modal(team)" v-if="$store.state.user.admin & team" class="is-info tag" rounded><i class="fas fa-plus"></i></b-button>
</span> </span>
</template> </template>
<script> <script>
@ -54,25 +53,19 @@ import AjaxErrorHandler from ".././assets/js/errorHandler";
export default { export default {
name: 'UserBadges', name: 'UserBadges',
props: ['admin', 'booster', 'bot', 'hidden', 'banned', 'system', 'username', 'user', 'verified', 'team'], props: ['admin', 'booster', 'bot', 'hidden', 'banned', 'system', 'username', 'noPlus', 'verified'],
data() { data() {
return { return {
modifyUserModal: false modifyUserModal: false
} }
}, },
methods: { methods: {
modal(type) { modal() {
if(type === 'user') {
this.modifyUserModal = true this.modifyUserModal = true
} else if(type === 'team') {
console.log('Debug: Feature not implemented')
} else {
this.modifyUserModal = true
}
}, },
modifyUser() { modifyUser() {
this.axios this.axios
.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'admin/user/modify', { .put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'admin/user/modify', {
username: this.username, username: this.username,
bot: this.bot, bot: this.bot,
system: this.system, system: this.system,

View file

@ -1,81 +0,0 @@
<template>
<div class="banners">
<section
v-if="!$store.state.user.emailVerified && $store.state.user.username"
class="hero is-danger"
>
<div class="hero-body" style="padding: 1rem 1rem !important">
<div class="mobile-container">
<div class="container">
<p style="text-align: center">{{ $t("errors.emailVerify") }}</p>
</div>
</div>
</div>
</section>
<section
v-if="!$store.state.client.secure && !$store.state.client.development"
class="hero is-danger"
>
<div class="hero-body" style="padding: 1rem 1rem !important">
<div class="mobile-container">
<div class="container">
<p style="text-align: center">{{$t('errors.insecure')}}</p>
</div>
</div>
</div>
</section>
<section
v-if="
$store.state.client.clientVersion !==
$store.state.client.latestClientVersion && showOutdatedBanner && $store.state.client.latestClientVersion && !$store.state.client.development
"
class="hero is-warning"
>
<div class="hero-body" style="padding: 1rem 1rem !important">
<div class="mobile-container">
<div class="container">
<p style="text-align: center">{{$t('errors.outdated')}}<button
type="button"
class="delete"
style="float: right"
@click="showOutdatedBanner = false"
/>
</p>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
export default {
name: "Banners",
data() {
return {
showOutdatedBanner: true,
showBanner: true
}
},
methods: {
toggleBrokenRoute(val) {
this.$store.commit("brokenRoute", val);
},
getBannerId() {
this.showBanner = !localStorage.getItem(this.$store.state.client.bannerId);
},
updateDismissed() {
localStorage.setItem(
"update-" + this.$store.state.client.clientVersion,
true
);
this.updateModal = false;
},
removeBannerId() {
localStorage.setItem(this.$store.state.client.bannerId, true);
this.$store.state.client.bannerEnabled = false;
console.log(localStorage.getItem(this.$store.state.client.bannerId));
},
}
}
</script>

View file

@ -4,12 +4,11 @@
<form> <form>
<div class="modal-card" style="width: auto"> <div class="modal-card" style="width: auto">
<header class="modal-card-head"> <header class="modal-card-head">
<p class="modal-card-title">{{ $t("feedback.title") }}</p> <p class="modal-card-title">{{ $t('feedback.title') }}</p>
<button <button
type="button" type="button"
class="delete" class="delete"
@click="feedbackModal = false" @click="feedbackModal = false"/>
/>
</header> </header>
<section class="modal-card-body"> <section class="modal-card-body">
<p>This feedback will be used to make Kaverti better.</p> <p>This feedback will be used to make Kaverti better.</p>
@ -17,24 +16,18 @@
<b-input <b-input
:placeholder="$store.state.user.email" :placeholder="$store.state.user.email"
v-model="feedback.email" v-model="feedback.email"
required required>
>
</b-input> </b-input>
</b-field> </b-field>
<b-field :label="$t('feedback.route')"> <b-field :label="$t('feedback.route')">
<b-input <b-input
:placeholder="$t('feedback.route')" :placeholder="$t('feedback.route')"
v-model="feedback.route" v-model="feedback.route"
required required>
>
</b-input> </b-input>
</b-field> </b-field>
<b-field :label="$t('feedback.rating')"> <b-field :label="$t('feedback.rating')">
<b-rate <b-rate icon-pack="fas" v-model="feedback.stars" custom-text="Route rating"></b-rate>
icon-pack="fas"
v-model="feedback.stars"
custom-text="Route rating"
></b-rate>
</b-field> </b-field>
<b-field :label="$t('feedback.text')"> <b-field :label="$t('feedback.text')">
<b-input <b-input
@ -42,8 +35,7 @@
v-model="feedback.text" v-model="feedback.text"
maxlength="512" maxlength="512"
type="textarea" type="textarea"
required required>
>
</b-input> </b-input>
</b-field> </b-field>
</section> </section>
@ -52,13 +44,10 @@
@click="doFeedback()" @click="doFeedback()"
:loading="feedback.loading" :loading="feedback.loading"
:label="$t('feedback.submit')" :label="$t('feedback.submit')"
type="is-info" type="is-primary" />
></b-button>
<b-button <b-button
:label="$t('close')" :label="$t('close')"
@click="feedbackModal = false" @click="feedbackModal = false" />
tpe="is-danger"
></b-button>
</footer> </footer>
</div> </div>
</form> </form>
@ -66,197 +55,132 @@
<b-modal v-model="langModal"> <b-modal v-model="langModal">
<div class="modal-card" style="width: auto"> <div class="modal-card" style="width: auto">
<header class="modal-card-head"> <header class="modal-card-head">
<p class="modal-card-title">{{ $t("languages.title") }}</p> <p class="modal-card-title">{{$t('languages.title')}}</p>
<button <button
type="button" type="button"
class="delete" class="delete"
@click="langModal = false" @click="langModal = false"/>
></button>
</header> </header>
<section class="modal-card-body buttons"> <section class="modal-card-body buttons">
<b-button <b-button v-if="$i18n.locale !== 'en'" @click="en" class="is-large">{{$t('languages.en')}}</b-button>
@click="lang('en')" <b-button v-if="$i18n.locale === 'en'" @click="en" class="is-large is-info disabled" disabled>{{$t('languages.en')}}</b-button>
class="is-large" <b-button v-if="$i18n.locale === 'wind'" @click="en" class="is-large is-info disabled" disabled>{{$t('languages.wind')}}</b-button>
:disabled="$i18n.locale === 'en'" <b-button v-if="$i18n.locale === 'debug'" @click="en" class="is-large is-info disabled" disabled>{{$t('languages.debug')}}</b-button>
>{{ $t("languages.en") }}</b-button
>
<b-button
@click="lang('fr')"
class="is-large"
:disabled="$i18n.locale === 'fr'"
>{{ $t("languages.fr") }}</b-button
>
<b-button
@click="lang('ru')"
class="is-large"
:disabled="$i18n.locale === 'ru'"
>{{ $t("languages.ru") }}</b-button
>
<b-button
@click="lang('nl')"
class="is-large"
:disabled="$i18n.locale === 'nl'"
>{{ $t("languages.nl") }}</b-button
>
<b-button
@click="lang('zh-cn')"
class="is-large"
:disabled="$i18n.locale === 'zh-cn'"
>{{ $t("languages.zh-cn") }}</b-button
>
<b-button
@click="lang('zh-tw')"
class="is-large"
:disabled="$i18n.locale === 'zh-tw'"
>{{ $t("languages.zh-tw") }}</b-button
>
</section> </section>
</div> </div>
</b-modal> </b-modal>
<h1>&copy; 2021 Kaverti</h1> <h1>&copy; 2021 Kaverti</h1>
<p>Version: {{$store.state.client.clientVersion}}</p>
<p>Build Date: {{$store.state.client.buildDate}}</p>
<p v-if="$store.state.client.development">!! DEVELOPMENT MODE !! {{$store.state.client.domain}}</p>
<p style="color: red" v-if="!$store.state.client.secure">!! BEING ACCESSED INSECURELY !!</p>
<p style="color: red" v-if="checkInsecure && $store.state.client.secure">!! INSECURE WARNING OVERRIDE !!</p>
<div class="buttons"> <div class="buttons">
<b-button class="is-danger" @click="disableInsecure()" v-if="$store.state.debug && !$store.state.client.secure && !$store.state.client.development">Debug: Disable insecure warning</b-button> <b-button @click="langModal = true">{{$t('languages.title')}}</b-button>
<b-button type="is-info" @click="langModal = true">{{ $t("languages.title") }}</b-button> <b-button @click="feedbackModal = true">Provide Feedback</b-button>
<b-button type="is-info" @click="feedbackModal = true">Provide Feedback</b-button>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import AjaxErrorHandler from ".././assets/js/errorHandler"; import AjaxErrorHandler from '.././assets/js/errorHandler'
export default { export default {
name: "Footer", name: 'locale-changer',
data () { data () {
return { return {
feedbackModal: false, feedbackModal: false,
langs: ["en", "debug", "wind"], langs: ['en', 'debug', 'wind'],
currentLang: this.$i18n.locale, currentLang: this.$i18n.locale,
langModal: false, langModal: false,
feedback: { feedback: {
route: this.$route.path, route: this.$route.path,
stars: 0, stars: 0,
text: "", text: '',
email: this.$store.state.user.email, email: this.$store.state.user.email,
loading: false, loading: false
}, }
};
},
computed: {
checkInsecure() {
return window.location.protocol === "http:";
} }
}, },
methods: { methods: {
disableInsecure() {
this.$store.commit("setSecure", true);
},
doFeedback() { doFeedback() {
this.feedback.loading = true; this.feedback.loading = true
this.axios this.axios
.post( .post(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'feedback', {
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/" +
"feedback",
{
text: this.feedback.text, text: this.feedback.text,
stars: this.feedback.stars, stars: this.feedback.stars,
email: this.feedback.email, email: this.feedback.email,
route: this.feedback.route, route: this.feedback.route
} })
) .then(() => {
.then(() => { this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'userinfo')
this.axios.get( this.feedbackModal = false
process.env.VUE_APP_API_ENDPOINT + this.$buefy.snackbar.open({message:this.$t('errors.feedbackThanks'), type: 'is-info'})
process.env.VUE_APP_API_VERSION + this.feedback.loading = false
"/" + })
"userinfo" .catch(e => {
); AjaxErrorHandler(this.$store)(e)
this.feedbackModal = false; this.feedback.loading = false
this.$buefy.snackbar.open({
message: this.$t("errors.feedbackThanks"),
type: "is-info",
});
this.feedback.loading = false;
}) })
.catch((e) => {
AjaxErrorHandler(this.$store)(e);
this.feedback.loading = false;
});
}, },
lang(lang) { en () {
this.$i18n.locale = lang; this.$i18n.locale = "en"
this.setLang(); this.setLang()
},
debug () {
this.$i18n.locale = "debug"
this.setLang()
},
wind () {
this.$i18n.locale = "wind"
this.setLang()
}, },
setLang () { setLang () {
localStorage.setItem("lang", this.$i18n.locale); localStorage.setItem("lang", this.$i18n.locale);
this.axios this.axios
.put( .put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'users/preferences', {
process.env.VUE_APP_API_ENDPOINT + lang: this.$i18n.locale
process.env.VUE_APP_API_VERSION +
"/" +
"users/preferences",
{
lang: this.$i18n.locale,
}
)
.then(() => {
this.axios
.get(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/" +
"userinfo"
)
.then((res) => {
this.$store.commit("setUsername", res.data.username);
this.$store.commit("setEmail", res.data.email);
this.$store.commit("setEmailVerified", res.data.emailVerified);
this.$store.commit("setAdmin", res.data.admin);
this.$store.commit("setDevMode", res.data.developerMode);
this.$store.commit("setTheme", res.data.theme);
this.$store.commit("setLang", res.data.lang);
});
}) })
.catch((e) => { .then(() => {
AjaxErrorHandler(this.$store)(e); this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'userinfo')
}); .then(res => {
}, this.$store.commit('setUsername', res.data.username)
this.$store.commit('setEmail', res.data.email)
this.$store.commit('setEmailVerified', res.data.emailVerified)
this.$store.commit('setAdmin', res.data.admin)
this.$store.commit('setDevMode', res.data.developerMode)
this.$store.commit('setTheme', res.data.theme)
this.$store.commit('setLang', res.data.lang)
})
})
.catch(e => {
AjaxErrorHandler(this.$store)(e)
})
}
}, },
mounted () { mounted () {
if(localStorage.getItem("lang")) { if(localStorage.getItem("lang")) {
this.$i18n.locale = localStorage.getItem("lang"); this.$i18n.locale = localStorage.getItem("lang")
} else if (this.$store.state.user.lang) { } else if (this.$store.state.user.lang) {
this.$i18n.locale = this.$store.state.user.lang; this.$i18n.locale = this.$store.state.user.lang
} else { } else {
this.$i18n.locale = "en"; this.$i18n.locale = "en"
} }
this.$nextTick(() => { this.$nextTick(() => {
this.feedback = { this.feedback = {
route: this.$route.path, route: this.$route.path,
stars: 0, stars: 0,
text: "", text: '',
email: this.$store.state.user.email, email: this.$store.state.user.email
}; }
}); })
}, },
watch: { watch: {
$route() { $route() {
this.feedback = { this.feedback = {
route: this.$route.path, route: this.$route.path,
stars: 0, stars: 0,
text: "", text: '',
email: this.$store.state.user.email, email: this.$store.state.user.email
}; }
}, },
currentLang() { currentLang() {
this.setLang(); this.setLang()
console.log("change"); console.log('change')
}, }
}, }
}; }
</script> </script>

File diff suppressed because it is too large Load diff

View file

@ -113,7 +113,7 @@ export default {
this.loading = true; this.loading = true;
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/conversations`, { params }) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `users/conversations`, { params })
.then(res => { .then(res => {
this.loading = false; this.loading = false;
this.$store.commit('addConversations', res.data.Conversations); this.$store.commit('addConversations', res.data.Conversations);

View file

@ -1,394 +0,0 @@
{
"login": {
"title": "Mit Kaverti verbinden",
"login": "Verbinden",
"loginPassword": "Bitte geben Sie Ihr Passwort ein",
"loginUsername": "Bitte geben Sie Ihren Benutzernamen oder Ihre E-Mail ein",
"doNotSaveAuth": "Anmeldeinformationen nicht speichern (Sie werden abgemeldet, wenn Sie den Browser schließen)",
"register": "Ein Konto erstellen"
},
"register": {
"title": "Kaverti Konto erstellen",
"text": "Anmelden",
"username": "Bitte geben Sie Ihren Benutzernamen ein",
"email": "Bitte geben Sie Ihre E-Mail Adresse ein",
"password": "Bitte geben Sie ein sicheres Passwort ein",
"confirm": "Bitte bestätigen Sie Ihr Passwort",
"login": "Haben Sie bereits ein Kaverti Konto?",
"agree": "Akzeptieren Sie die "
},
"teams": {
"createTeam": "Ein Team erstellen",
"joinTeam": "Werden Sie Teil des Teams",
"join": "Ansprechpartner",
"invite": "Einladen",
"viewPermissions": "Siehe die Berechtigungen der Rolle",
"devBanner": "Teams sind noch in der Entwicklung, erwarten Sie fehlende Funktionen",
"view": "Siehe",
"viewTeam": "Siehe das Team",
"memberRoles": "Mitglieder und Rollen",
"members": "Mitglieder",
"roles": "Rollen",
"items": "Erstellte Elemente",
"foundedAt": "Das Team wurde gegründet am",
"teamWall": "Mur de l'équipe",
"teamWallText": ": leur mur public",
"verified": "Équipe vérifiée",
"admin": {
"text": "Administration de l'équipe",
"nav": {
"general": "Général",
"roles": "Rôles",
"members": "Membres",
"privacy": "Paramètres de confidentialité",
"invites": "Invitations",
"forum": "Forum",
"verification": "Vérification"
},
"general": {
"title": "Général",
"name": "Nom",
"description": "Description",
"saveTeam": "Enregistrer l'équipe",
"modifyPicture": "Modifier l'avatar de l'équipe"
},
"roles": {
"title": "Rôles",
"addRole": "Ajouter un rôle",
"saveOrder": "Enregistrer l'ordre des rôles",
"modifying": "Modification",
"name": "Nom choisi pour le rôle",
"permissions": "Permissions",
"creating": "Création d'un rôle"
},
"members": {
"title": "Membres",
"modifyRoles": "Modifier les rôles utilisateurs",
"removeAllRoles": "Retirer tous les rôles de l'utilisateur"
},
"privacy": {
"title": "Confidentialité de l'Équipe",
"teamWall": "Se désabonner du mur public de l'équipe",
"disallowForum": "Révoquer les permissions du public d'écrire ou de voir le forum de l'équipe"
},
"invites": {
"title": "Invitations",
"code": "Code",
"uses": "Utilisations",
"maxUses": "Nombre d'utilisations maximal",
"createdBy": "Créées par",
"date": "Date",
"delete": "Supprimer la sélection",
"generate": "Générer une invitation"
},
"invite": {
"title": "Inviter quelqu'un dans",
"amountUses": "Nombre d'utilisations (0 est illimité)",
"role": "Veuillez sélectionner un rôle qui sera auto-assigné à l'utilisateur (optionnel)",
"refresh": "Rafraîchir",
"inviteURL": "URL d'invitation",
"domain": "https://kaverti.com/invite/"
}
},
"permissionTypes": {
"inviteUsers": "Inviter des utilisateurs",
"administrator": "Administrateur",
"modifyRoles": "Modifier les rôles, permissions ou utilisateurs",
"modifyTeamSettings": "Modifier les paramètres d'équipe",
"teamForum": "Modifier la configuration du forum de l'équipe",
"forumModerator": "Permissions de modération du forum",
"forumAdmin": "Administrateur de forum",
"submitMarketplace": "Soumettre des items sur le marché",
"priorityValue": "Configurer la valeur de priorité"
}
},
"navbar": {
"home": "Accueil",
"forums": "Forum",
"marketplace": "Marché",
"downloads": "Téléchargements",
"games": "Jeux",
"users": "Utilisateurs",
"teams": "Équipes",
"dev": {
"title": "Options développeurs",
"fakeUser": "Fausse authentification utilisateur",
"debug": "Page de debug",
"brokenRoute": "Activer les pages cassées (désactivé)"
},
"user": {
"title": "Inconnu",
"profile": "Mon Profil",
"creations": "Mes créations",
"downloads": "Téléchargements",
"avatar": "Mon avatar",
"transactions": "Transactions",
"settings": "Paramètres",
"logout": "Déconnexion",
"admin": "Administration",
"asset": "Charger un item",
"friends": "Amis"
},
"more": {
"title": "Plus",
"twitter": "Twitter",
"discord": "Discord",
"roadmap": "Feuille de route",
"documentation": "Documentation de l'API",
"stats": "Statistiques de Kaverti",
"blog": "Blog Kaverti"
},
"register": "S'enregistrer",
"login": "Se connecter"
},
"404": {
"title": "404 Introuvable",
"text": "Oh non! Vous avez probablement entré l'adresse incorrectement",
"quoteText": "There are currently 2900 WIND quotes available",
"windQuote": "WIND Quote",
"home": "Retour à l'accueil"
},
"debug": {
"title": "Mode debug activé",
"authUser": "Utilisateur authentifié",
"state": "Dump d'état",
"userState": "Dump d'état de l'utilisateur (User state dump)",
"token": "Jeton d'authentification",
"disable": "Désactiver les options de debug",
"auth": "Test d'authentification"
},
"errors": {
"authFail": "Erreur de requête, vous n'êtes pas authentifié. (L'API est-elle bloquée?)",
"devBuild": "Attention, vous utilisez une version développeur de Kaverti, attendez-vous à des instabilités",
"disableDebug": "Mode debug désactivé, vous n'aurez plus accès aux fonctionnalités développeur jusqu'à ce que vous rafraîchissez la page.",
"authSuccess": "Requête faite avec succès, votre jeton est valide, le serveur Kaverti marche correctement.",
"login": "Vous êtes maintenant connecté.",
"down": "Il semblerait qu'il y ait un problème avec Kaverti, réessayez plus tard.",
"canaryBuild": "Vous utilisez le client Canary. Si vous vous attendez à une expérience stable, veuillez utiliser le client normal sur Kaverti.com.",
"logout": "Vous êtes déconnectés de Kaverti.",
"register": "Vous êtes maintenant enregistrés sur Kaverti, bienvenue!",
"emailVerify": "Veuillez entrer votre e-mail pour vérifier votre compte",
"outdated": "Vous utilisez une version ancienne de Kaverti, veuillez rafraîchir la page.",
"insecure": "Vous accédez à Kaverti de façon non sécurisée, les fonctions d'authentification seront désactivées.",
"verifySent": "Le e-mail de vérification vient de vous être envoyé!"
},
"generic": {
"name": "Kaverti",
"loading": "Chargement",
"noItemsConnection": "Vérifiez votre connexion internet ou réessayez plus tard.",
"noItemsStart": "Il n'y a pas de",
"noItemsEnd": "à afficher.",
"adminOnly": "Seuls les administrateurs peuvent ouvrir cette page.",
"notLoggedIn": "Vous devez vous connecter pour ouvrir cette page."
},
"relationships": {
"pending": "Annuler la demande d'amitié",
"notFriends": "Envoyer la demande d'amitié",
"pendingCanAccept": "Accepter la demande d'amitié",
"accepted": "Retirer l'ami"
},
"modifyUser": {
"title": "Modifier l'utilisateur",
"text": "Modifier les badges de l'utilisateur"
},
"home": {
"globalWall": "Mur Global",
"news": "Nouvelles Kaverti"
},
"badges": {
"admin": "Admin",
"bot": "Bot",
"add": "+",
"system": "Système",
"banned": "Banni",
"hidden": "Caché",
"booster": "Boosteur Discord"
},
"user": {
"title": "Chargement",
"about": "À propos de",
"more": "Plus de",
"posts": "Messages",
"threads": "Fil",
"inventory": "Inventaire",
"awards": "Prix",
"items": "Items",
"wall": "Mur de l'utilisateur",
"description": "Description",
"created": "Enregistré le",
"defaultDesc": "Salut, je suis ",
"marketplace": "Items publié",
"relationships": "Amis",
"wearing": "Habillage",
"inventoryTab": {
"buyNow": "Acheter maintenant pour ",
"was": "était",
"unavailable": "Item n'est pas disponible",
"noItems": "Cet utilisateur n'a rien dans son inventaire!",
"onSale": "Item en vente"
}
},
"stats": {
"title": "Statistiques",
"users": "Utilisateurs enregistrés",
"purchased": "Items achetés",
"items": "Items soumis",
"posts": "Messages sur le forum",
"threads": "Fils",
"teams": "Équipes"
},
"settings": {
"title": "Paramètres utilisateur",
"menu": {
"general": "Général",
"security": "Compte et sécurité",
"experiments": "Expérimentations",
"about": "À propos",
"title": "Paramètres"
},
"general": {
"title": "Général",
"about": "À propos",
"description": "Description",
"hi": "Salut, je suis",
"saveDesc": "Enregistrer la description",
"savePref": "Enregistrer les préférences",
"preferences": "Préférences",
"devMode": "Mode développeur"
},
"security": {
"title": "Compte et sécurité",
"password": {
"title": "Changement du mot de passe",
"oldPassword": "Veuillez entrer votre mot de passe actuel",
"newPassword": "Veuillez entrer votre nouveau mot de passe",
"newPasswordConfirm": "Veuillez confirmer votre nouveau mot de passe",
"change": "Changer (Vous serez déconnecté-e)"
},
"email": {
"title": "Changement d'adresse e-amil",
"newEmail": "Entrez votre nouvelle adresse e-amil",
"change": "Changer",
"verified": "E-mail validé: ",
"verifiedTrue": "Oui",
"verifiedFalse": "Non",
"current": "Votre e-mail est: "
},
"resend": {
"resend": "Renvoyer le e-mail de validation"
},
"session": {
"title": "Se déconnecter de toutes les sessions",
"subtitle": "Ceci vous déconnectera de toutes les sessions, incluant celle-ci!",
"invalidate": "Invalider les sessions"
}
},
"privacy": {
"title": "Confidentialité"
},
"experiments": {
"title": "Expérimentations"
},
"about": {
"title": "À propos"
}
},
"languages": {
"title": "Sélecteur de langue",
"en": "English",
"wind": "Windspeak",
"fr": "Français",
"zh-cn": "简体中文",
"zh-tw": "繁體中文",
"ru": "русский",
"de": "Deutsch",
"debug": "Debug"
},
"admin": {
"title": "Administrateur Kaverti",
"dashboard": "Tableau de bord (bientôt)",
"uploadItem": "Créer un chapeau",
"executive": {
"title": "Personnel Exécutif",
"soon": "(Bientôt)"
}
},
"marketplace": {
"hats": "Chapeaux",
"faces": "Visages",
"shirts": "Chemises",
"pants": "Pantalons",
"collections": "Collections",
"moreInfo": "Plus d'informations",
"filter": "Filtres",
"search": "Chercher sur le marché"
},
"update": {
"title": "Journal des modifications"
},
"marketplaceItem": {
"moreInfo": "Informations and Statistiques",
"price": "Prix",
"originalPrice": "Prix original",
"creator": "Créateur"
},
"friends": {
"pendingCanAccept": "Demandes pour vous",
"pending": "Demandes en attente",
"accepted": "Demandes acceptées"
},
"feedback": {
"title": "Feedback pour le site",
"email": "Votre email:",
"route": "Page pour laquelle vous voulez soumettre votre avis:",
"rating": "Cote",
"text": "Comment pouvons-nous nous améliorer?",
"submit": "Soumettre"
},
"guided": {
"registration": {
"title": "Bienvenue chez Kaverti",
"desc": "Commencons...",
"account": "Compte",
"information": "Information",
"customization": "Personnalisation",
"finish": "Finir",
"continue": "Continuer",
"init": {
"login": "Connexion"
},
"info": {
"description": "Votre description choisie:",
"placeholder": "Dites quelque chose d'intéressant à propos de vous."
},
"customize": {
"light": "Illuminé",
"dark": "Sombre",
"amoled": "AMOLED",
"highContrast": "Haut Contraste",
"theme": "Choisissez votre thème préféré:"
},
"finishing": {
"home": "Commencer à utiliser Kaverti"
}
},
"tCreate": {
}
},
"avatar": {
"reRender": "Regénérer l'avatar",
"hats": "Chapeaux",
"faces": "Visages",
"shirts": "Chemises",
"pants": "Pantalons",
"collections": "Collections",
"debug": "Debug"
},
"currency": "Koins",
"close": "Annuler",
"tos": "Conditions d'utilisation",
"gotIt": "D'accord, j'accepte",
"OK": "OK",
"errorModalTitle": "Une erreur est survenue..."
}

3
src/locales/debug.json Normal file
View file

@ -0,0 +1,3 @@
{
"message": "hello i18n !!"
}

View file

@ -126,7 +126,6 @@
"settings": "Settings", "settings": "Settings",
"logout": "Logout", "logout": "Logout",
"admin": "Admin", "admin": "Admin",
"asset": "Item Upload",
"friends": "Friends" "friends": "Friends"
}, },
"more": { "more": {
@ -167,10 +166,7 @@
"canaryBuild": "You are using the Canary client, if you are expecting a stable experience, please use the regular one on Kaverti.com.", "canaryBuild": "You are using the Canary client, if you are expecting a stable experience, please use the regular one on Kaverti.com.",
"logout": "You have been logged out of Kaverti.", "logout": "You have been logged out of Kaverti.",
"register": "You have been registered to Kaverti, Welcome!", "register": "You have been registered to Kaverti, Welcome!",
"emailVerify": "Please verify your email to get full access to Kaverti!", "emailVerify": "Please verify your email to get full access to Kaverti!"
"outdated": "You are using an outdated version of Kaverti, please refresh.",
"insecure": "You are accessing Kaverti insecurely, authentication features will be disabled for security.",
"verifySent": "Email address verification email has been sent!"
}, },
"generic": { "generic": {
"name": "Kaverti", "name": "Kaverti",
@ -178,8 +174,7 @@
"noItemsConnection": "Please check your internet connection, or try again later.", "noItemsConnection": "Please check your internet connection, or try again later.",
"noItemsStart": "There are no", "noItemsStart": "There are no",
"noItemsEnd": "to display.", "noItemsEnd": "to display.",
"adminOnly": "Only users with admin are allowed to navigate to this route.", "adminOnly": "Only users with admin are allowed to navigate to this route."
"notLoggedIn": "You have to login to access this route."
}, },
"relationships": { "relationships": {
"pending": "Cancel Friend Request", "pending": "Cancel Friend Request",
@ -239,49 +234,18 @@
}, },
"settings": { "settings": {
"title": "User Settings", "title": "User Settings",
"menu": {
"general": "General",
"security": "Account & Security",
"experiments": "Experiments",
"about": "About",
"title": "Settings"
},
"general": { "general": {
"title": "General", "title": "General",
"about": "About", "about": "About",
"description": "Description", "description": "Your description",
"hi": "Hi, I'm", "hi": "Hi, I'm",
"saveDesc": "Save Description", "saveDesc": "Save description",
"savePref": "Save Preferences", "savePref": "Save preferences",
"preferences": "Preferences", "preferences": "Preferences",
"devMode": "Developer Mode" "devMode": "Developer mode"
}, },
"security": { "security": {
"title": "Account & Security", "title": "Security"
"password": {
"title": "Changing your password",
"oldPassword": "Please enter your existing password",
"newPassword": "Please enter your new desired password",
"newPasswordConfirm": "Please re-enter your desired password",
"change": "Change password (You will be logged out)"
},
"email": {
"title": "Change email address",
"newEmail": "Enter your new email address",
"change": "Change",
"verified": "Email Verified: ",
"verifiedTrue": "Yes",
"verifiedFalse": "No",
"current": "Your email is: "
},
"resend": {
"resend": "Resend Email Verification"
},
"session": {
"title": "Invalidate all sessions",
"subtitle": "Using this feature will log you out of all devices, including this one!",
"invalidate": "Invalidate sessions"
}
}, },
"privacy": { "privacy": {
"title": "Privacy" "title": "Privacy"
@ -296,12 +260,7 @@
"languages": { "languages": {
"title": "Locale Selector", "title": "Locale Selector",
"en": "English", "en": "English",
"nl": "Nederlands",
"wind": "Windspeak", "wind": "Windspeak",
"fr": "Français",
"zh-cn": "简体中文",
"zh-tw": "繁體中文",
"ru": "русский",
"debug": "Debug" "debug": "Debug"
}, },
"admin": { "admin": {
@ -358,16 +317,14 @@
"login": "Login" "login": "Login"
}, },
"info": { "info": {
"description": "Your chosen description:", "description": "Your chosen description:"
"placeholder": "Say something interesting about yourself."
}, },
"customize": { "customize": {
"light": "Light", "light": "Light",
"dark": "Dark", "dark": "Dark",
"amoled": "AMOLED", "amoled": "AMOLED",
"highContrast": "High Contrast", "highContrast": "High Contrast",
"theme": "Select your preferred theme:", "theme": "Select your preferred theme:"
"themeWarning": "Themes are currently coming soon, your selected theme will apply when they are added."
}, },
"finishing": { "finishing": {
"home": "Start using Kaverti" "home": "Start using Kaverti"
@ -376,17 +333,8 @@
"tCreate": { "tCreate": {
} }
}, },
"avatar": {
"reRender": "Re-render avatar",
"hats": "Hats",
"faces": "Faces",
"shirts": "Shirts",
"pants": "Pants",
"collections": "Collections",
"debug": "Debug"
},
"currency": "Koins", "currency": "Koins",
"close": "Cancel", "close": "Close",
"tos": "Terms of Service", "tos": "Terms of Service",
"gotIt": "Got it!", "gotIt": "Got it!",
"OK": "OK", "OK": "OK",

View file

@ -1,394 +0,0 @@
{
"login": {
"title": "Se connecter à Kaverti",
"login": "Connexion",
"loginPassword": "Veuillez entrer votre mot de passe",
"loginUsername": "Veuillez entrer votre nom d'utilisateur ou e-mail",
"doNotSaveAuth": "Ne pas enregistrer les informations de connexion (vous serez déconnecté lorsque vous fermerez le navigateur)",
"register": "Se créer un compte"
},
"register": {
"title": "Créer un compte Kaverti",
"text": "S'inscrire",
"username": "Veuillez entrer votre nom d'utilisateur",
"email": "Veuillez entrer votre e-mail",
"password": "Veuillez entrer un mot de passe sécuritaire",
"confirm": "Veuillez confirmer votre mot de passe",
"login": "Avez-vous déjà un compte Kaverti?",
"agree": "Acceptez-vous les "
},
"teams": {
"createTeam": "Créer une équipe",
"joinTeam": "Joindre l'équipe",
"join": "Joindre",
"invite": "Inviter",
"viewPermissions": "Voir les permissions du rôle",
"devBanner": "Les équipes sont encore en développement, attendez-vous à des fonctionnalités manquantes",
"view": "Voir",
"viewTeam": "Voir l'équipe",
"memberRoles": "Membres et rôles",
"members": "Membres",
"roles": "Rôles",
"items": "Items crées",
"foundedAt": "L'équipe a été fondée le",
"teamWall": "Mur de l'équipe",
"teamWallText": ": leur mur public",
"verified": "Équipe vérifiée",
"admin": {
"text": "Administration de l'équipe",
"nav": {
"general": "Général",
"roles": "Rôles",
"members": "Membres",
"privacy": "Paramètres de confidentialité",
"invites": "Invitations",
"forum": "Forum",
"verification": "Vérification"
},
"general": {
"title": "Général",
"name": "Nom",
"description": "Description",
"saveTeam": "Enregistrer l'équipe",
"modifyPicture": "Modifier l'avatar de l'équipe"
},
"roles": {
"title": "Rôles",
"addRole": "Ajouter un rôle",
"saveOrder": "Enregistrer l'ordre des rôles",
"modifying": "Modification",
"name": "Nom choisi pour le rôle",
"permissions": "Permissions",
"creating": "Création d'un rôle"
},
"members": {
"title": "Membres",
"modifyRoles": "Modifier les rôles utilisateurs",
"removeAllRoles": "Retirer tous les rôles de l'utilisateur"
},
"privacy": {
"title": "Confidentialité de l'Équipe",
"teamWall": "Se désabonner du mur public de l'équipe",
"disallowForum": "Révoquer les permissions du public d'écrire ou de voir le forum de l'équipe"
},
"invites": {
"title": "Invitations",
"code": "Code",
"uses": "Utilisations",
"maxUses": "Nombre d'utilisations maximal",
"createdBy": "Créées par",
"date": "Date",
"delete": "Supprimer la sélection",
"generate": "Générer une invitation"
},
"invite": {
"title": "Inviter quelqu'un dans",
"amountUses": "Nombre d'utilisations (0 est illimité)",
"role": "Veuillez sélectionner un rôle qui sera auto-assigné à l'utilisateur (optionnel)",
"refresh": "Rafraîchir",
"inviteURL": "URL d'invitation",
"domain": "https://kaverti.com/invite/"
}
},
"permissionTypes": {
"inviteUsers": "Inviter des utilisateurs",
"administrator": "Administrateur",
"modifyRoles": "Modifier les rôles, permissions ou utilisateurs",
"modifyTeamSettings": "Modifier les paramètres d'équipe",
"teamForum": "Modifier la configuration du forum de l'équipe",
"forumModerator": "Permissions de modération du forum",
"forumAdmin": "Administrateur de forum",
"submitMarketplace": "Soumettre des items sur le marché",
"priorityValue": "Configurer la valeur de priorité"
}
},
"navbar": {
"home": "Accueil",
"forums": "Forum",
"marketplace": "Marché",
"downloads": "Téléchargements",
"games": "Jeux",
"users": "Utilisateurs",
"teams": "Équipes",
"dev": {
"title": "Options développeurs",
"fakeUser": "Fausse authentification utilisateur",
"debug": "Page de debug",
"brokenRoute": "Activer les pages cassées (désactivé)"
},
"user": {
"title": "Inconnu",
"profile": "Mon Profil",
"creations": "Mes créations",
"downloads": "Téléchargements",
"avatar": "Mon avatar",
"transactions": "Transactions",
"settings": "Paramètres",
"logout": "Déconnexion",
"admin": "Administration",
"asset": "Charger un item",
"friends": "Amis"
},
"more": {
"title": "Plus",
"twitter": "Twitter",
"discord": "Discord",
"roadmap": "Feuille de route",
"documentation": "Documentation de l'API",
"stats": "Statistiques de Kaverti",
"blog": "Blog Kaverti"
},
"register": "S'enregistrer",
"login": "Se connecter"
},
"404": {
"title": "404 Introuvable",
"text": "Oh non! Vous avez probablement entré l'adresse incorrectement",
"quoteText": "There are currently 2900 WIND quotes available",
"windQuote": "WIND Quote",
"home": "Retour à l'accueil"
},
"debug": {
"title": "Mode debug activé",
"authUser": "Utilisateur authentifié",
"state": "Dump d'état",
"userState": "Dump d'état de l'utilisateur (User state dump)",
"token": "Jeton d'authentification",
"disable": "Désactiver les options de debug",
"auth": "Test d'authentification"
},
"errors": {
"authFail": "Erreur de requête, vous n'êtes pas authentifié. (L'API est-elle bloquée?)",
"devBuild": "Attention, vous utilisez une version développeur de Kaverti, attendez-vous à des instabilités",
"disableDebug": "Mode debug désactivé, vous n'aurez plus accès aux fonctionnalités développeur jusqu'à ce que vous rafraîchissez la page.",
"authSuccess": "Requête faite avec succès, votre jeton est valide, le serveur Kaverti marche correctement.",
"login": "Vous êtes maintenant connecté.",
"down": "Il semblerait qu'il y ait un problème avec Kaverti, réessayez plus tard.",
"canaryBuild": "Vous utilisez le client Canary. Si vous vous attendez à une expérience stable, veuillez utiliser le client normal sur Kaverti.com.",
"logout": "Vous êtes déconnectés de Kaverti.",
"register": "Vous êtes maintenant enregistrés sur Kaverti, bienvenue!",
"emailVerify": "Veuillez entrer votre e-mail pour vérifier votre compte",
"outdated": "Vous utilisez une version ancienne de Kaverti, veuillez rafraîchir la page.",
"insecure": "Vous accédez à Kaverti de façon non sécurisée, les fonctions d'authentification seront désactivées.",
"verifySent": "Le e-mail de vérification vient de vous être envoyé!"
},
"generic": {
"name": "Kaverti",
"loading": "Chargement",
"noItemsConnection": "Vérifiez votre connexion internet ou réessayez plus tard.",
"noItemsStart": "Il n'y a pas de",
"noItemsEnd": "à afficher.",
"adminOnly": "Seuls les administrateurs peuvent ouvrir cette page.",
"notLoggedIn": "Vous devez vous connecter pour ouvrir cette page."
},
"relationships": {
"pending": "Annuler la demande d'amitié",
"notFriends": "Envoyer la demande d'amitié",
"pendingCanAccept": "Accepter la demande d'amitié",
"accepted": "Retirer l'ami"
},
"modifyUser": {
"title": "Modifier l'utilisateur",
"text": "Modifier les badges de l'utilisateur"
},
"home": {
"globalWall": "Mur Global",
"news": "Nouvelles Kaverti"
},
"badges": {
"admin": "Admin",
"bot": "Bot",
"add": "+",
"system": "Système",
"banned": "Banni",
"hidden": "Caché",
"booster": "Boosteur Discord"
},
"user": {
"title": "Chargement",
"about": "À propos de",
"more": "Plus de",
"posts": "Messages",
"threads": "Fil",
"inventory": "Inventaire",
"awards": "Prix",
"items": "Items",
"wall": "Mur de l'utilisateur",
"description": "Description",
"created": "Enregistré le",
"defaultDesc": "Salut, je suis ",
"marketplace": "Items publié",
"relationships": "Amis",
"wearing": "Habillage",
"inventoryTab": {
"buyNow": "Acheter maintenant pour ",
"was": "était",
"unavailable": "Item n'est pas disponible",
"noItems": "Cet utilisateur n'a rien dans son inventaire!",
"onSale": "Item en vente"
}
},
"stats": {
"title": "Statistiques",
"users": "Utilisateurs enregistrés",
"purchased": "Items achetés",
"items": "Items soumis",
"posts": "Messages sur le forum",
"threads": "Fils",
"teams": "Équipes"
},
"settings": {
"title": "Paramètres utilisateur",
"menu": {
"general": "Général",
"security": "Compte et sécurité",
"experiments": "Expérimentations",
"about": "À propos",
"title": "Paramètres"
},
"general": {
"title": "Général",
"about": "À propos",
"description": "Description",
"hi": "Salut, je suis",
"saveDesc": "Enregistrer la description",
"savePref": "Enregistrer les préférences",
"preferences": "Préférences",
"devMode": "Mode développeur"
},
"security": {
"title": "Compte et sécurité",
"password": {
"title": "Changement du mot de passe",
"oldPassword": "Veuillez entrer votre mot de passe actuel",
"newPassword": "Veuillez entrer votre nouveau mot de passe",
"newPasswordConfirm": "Veuillez confirmer votre nouveau mot de passe",
"change": "Changer (Vous serez déconnecté-e)"
},
"email": {
"title": "Changement d'adresse e-amil",
"newEmail": "Entrez votre nouvelle adresse e-amil",
"change": "Changer",
"verified": "E-mail validé: ",
"verifiedTrue": "Oui",
"verifiedFalse": "Non",
"current": "Votre e-mail est: "
},
"resend": {
"resend": "Renvoyer le e-mail de validation"
},
"session": {
"title": "Se déconnecter de toutes les sessions",
"subtitle": "Ceci vous déconnectera de toutes les sessions, incluant celle-ci!",
"invalidate": "Invalider les sessions"
}
},
"privacy": {
"title": "Confidentialité"
},
"experiments": {
"title": "Expérimentations"
},
"about": {
"title": "À propos"
}
},
"languages": {
"title": "Sélecteur de langue",
"en": "English",
"wind": "Windspeak",
"fr": "Français",
"zh-cn": "简体中文",
"zh-tw": "繁體中文",
"ru": "русский",
"de": "Deutsch",
"debug": "Debug"
},
"admin": {
"title": "Administrateur Kaverti",
"dashboard": "Tableau de bord (bientôt)",
"uploadItem": "Créer un chapeau",
"executive": {
"title": "Personnel Exécutif",
"soon": "(Bientôt)"
}
},
"marketplace": {
"hats": "Chapeaux",
"faces": "Visages",
"shirts": "Chemises",
"pants": "Pantalons",
"collections": "Collections",
"moreInfo": "Plus d'informations",
"filter": "Filtres",
"search": "Chercher sur le marché"
},
"update": {
"title": "Journal des modifications"
},
"marketplaceItem": {
"moreInfo": "Informations and Statistiques",
"price": "Prix",
"originalPrice": "Prix original",
"creator": "Créateur"
},
"friends": {
"pendingCanAccept": "Demandes pour vous",
"pending": "Demandes en attente",
"accepted": "Demandes acceptées"
},
"feedback": {
"title": "Feedback pour le site",
"email": "Votre email:",
"route": "Page pour laquelle vous voulez soumettre votre avis:",
"rating": "Cote",
"text": "Comment pouvons-nous nous améliorer?",
"submit": "Soumettre"
},
"guided": {
"registration": {
"title": "Bienvenue chez Kaverti",
"desc": "Commencons...",
"account": "Compte",
"information": "Information",
"customization": "Personnalisation",
"finish": "Finir",
"continue": "Continuer",
"init": {
"login": "Connexion"
},
"info": {
"description": "Votre description choisie:",
"placeholder": "Dites quelque chose d'intéressant à propos de vous."
},
"customize": {
"light": "Illuminé",
"dark": "Sombre",
"amoled": "AMOLED",
"highContrast": "Haut Contraste",
"theme": "Choisissez votre thème préféré:"
},
"finishing": {
"home": "Commencer à utiliser Kaverti"
}
},
"tCreate": {
}
},
"avatar": {
"reRender": "Regénérer l'avatar",
"hats": "Chapeaux",
"faces": "Visages",
"shirts": "Chemises",
"pants": "Pantalons",
"collections": "Collections",
"debug": "Debug"
},
"currency": "Koins",
"close": "Annuler",
"tos": "Conditions d'utilisation",
"gotIt": "D'accord, j'accepte",
"OK": "OK",
"errorModalTitle": "Une erreur est survenue..."
}

View file

@ -1,393 +0,0 @@
{
"login": {
"title": "Войти в Kaverti",
"login": "Авторизоваться",
"loginPassword": "Пожалуйста, введите пароль",
"loginUsername": "Пожалуйста, введите ваше имя пользователя или адрес электронной почты",
"doNotSaveAuth": "Не сохранять токен в браузере (выйдет из системы при обновлении)",
"register": "Нет учетной записи?"
},
"register": {
"title": "Зарегистрируйтесь на Kaverti",
"text": "регистр",
"username": "Пожалуйста, введите имя пользователя",
"email": "Пожалуйста, введите ваш действующий адрес электронной почты",
"password": "Пожалуйста, введите надежный пароль",
"confirm": "Пожалуйста, введите надежный пароль еще раз",
"login": "Уже есть аккаунт?",
"agree": "Вы согласны с "
},
"teams": {
"createTeam": "Создать группу",
"joinTeam": "Вступить в группу",
"join": "Присоединиться",
"invite": "Приглашать",
"viewPermissions": "Просмотр разрешений ролей",
"devBanner": "Teams are currently in development, expect missing features.",
"view": "Посмотрите",
"viewTeam": "Посмотрите группу",
"memberRoles": "Члены группы и роли",
"members": "Члены группы",
"roles": "Роли",
"items": "Созданные предметы",
"foundedAt": "Группа была основана в ",
"teamWall": "Team Wall",
"teamWallText": "'s Team Wall",
"verified": "Проверенная группа",
"admin": {
"text": "Групповое администрирование",
"nav": {
"general": "Общий",
"roles": "Роли",
"members": "Члены группы",
"privacy": "Конфиденциальность",
"invites": "Приглашает",
"forum": "Форум",
"verification": "Проверка"
},
"general": {
"title": "Общий",
"name": "Имя",
"description": "Описание",
"saveTeam": "Сохранить группу",
"modifyPicture": "Modify Team avatar"
},
"roles": {
"title": "Роли",
"addRole": "Добавить роль",
"saveOrder": "Сохранить порядок ролей",
"modifying": "Изменение",
"name": "Выбранное название роли",
"permissions": "Разрешения",
"creating": "Создание роли"
},
"members": {
"title": "Члены группы",
"modifyRoles": "Изменить роли пользователей",
"removeAllRoles": "Удалить все роли с пользователя"
},
"privacy": {
"title": "Конфиденциальность группы",
"teamWall": "Отказаться от групповых стен",
"disallowForum": "Запретить кому-либо просматривать / создавать на форуме вашей группы"
},
"invites": {
"title": "Приглашает",
"code": "Код",
"uses": "Использует",
"maxUses": "Максимальное использование",
"createdBy": "Создано",
"date": "Дата",
"delete": "Удалить выбранное",
"generate": "Создать приглашение"
},
"invite": {
"title": "Пригласите людей в",
"amountUses": "Количество использований (0 не ограничено)",
"role": "Выберите роль, которую следует автоматически назначить пользователю (необязательно)",
"refresh": "Обновить",
"inviteURL": "URL приглашения",
"domain": "https://kaverti.com/invite/"
}
},
"permissionTypes": {
"inviteUsers": "Пригласить пользователей",
"administrator": "Администратор",
"modifyRoles": "Изменить роли / разрешения / пользователей",
"modifyTeamSettings": "Изменить настройки группы",
"teamForum": "Изменить конфигурацию форума группы",
"forumModerator": "Разрешения на модерацию форума",
"forumAdmin": "Администратор форума",
"submitMarketplace": "Отправьте товар на торговую площадку",
"priorityValue": "Установить значение приоритета"
}
},
"navbar": {
"home": "главная страница",
"forums": "Форум",
"marketplace": "магазин",
"downloads": "Загрузки",
"games": "Игры",
"users": "Пользователи",
"teams": "Группы",
"dev": {
"title": "Параметры разработчика",
"fakeUser": "Поддельная аутентификация пользователя",
"debug": "Страница отладки",
"brokenRoute": "Включить битые (отключенные) страницы"
},
"user": {
"title": "Неизвестный",
"profile": "Мой профиль",
"creations": "Мои творения",
"downloads": "Загрузки",
"avatar": "Мой аватар",
"transactions": "Сделки",
"settings": "Настройки",
"logout": "Выйти",
"admin": "Админ",
"asset": "загрузить одежду",
"friends": "Друзья"
},
"more": {
"title": "More",
"twitter": "Twitter",
"discord": "Discord",
"roadmap": "Roadmap",
"documentation": "API Docs",
"stats": "Kaverti Stats",
"blog": "Kaverti Blog"
},
"register": "Register",
"login": "Login"
},
"404": {
"title": "404 Not Found",
"text": "Oh uh! You must've entered the address wrong!",
"quoteText": "There is currently 2900 WIND quotes available",
"windQuote": "WIND Quote",
"home": "Go Home"
},
"debug": {
"title": "Debug mode enabled",
"authUser": "Authenticated user",
"state": "State dump",
"userState": "User state dump",
"token": "Auth token in state",
"disable": "Disable debug options",
"auth": "Test authentication"
},
"errors": {
"authFail": "Request failed, you are not authenticated. (Is API blocked?)",
"devBuild": "Warning: You are using a development build of Kaverti, expect instabilities.",
"disableDebug": "Debug mode disabled, you will no longer have access to development features until you refresh.",
"authSuccess": "Request successful, your token is valid, and the Kaverti server instance is running correctly.",
"login": "You have been logged into Kaverti.",
"down": "There has appeared to be an issue communicating with Kaverti, please try again later.",
"canaryBuild": "You are using the Canary client, if you are expecting a stable experience, please use the regular one on Kaverti.com.",
"logout": "You have been logged out of Kaverti.",
"register": "You have been registered to Kaverti, Welcome!",
"emailVerify": "Please verify your email to get full access to Kaverti!",
"outdated": "You are using an outdated version of Kaverti, please refresh.",
"insecure": "You are accessing Kaverti insecurely, authentication features will be disabled for security.",
"verifySent": "Email address verification email has been sent!"
},
"generic": {
"name": "Kaverti",
"loading": "Loading",
"noItemsConnection": "Please check your internet connection, or try again later.",
"noItemsStart": "There are no",
"noItemsEnd": "to display.",
"adminOnly": "Only users with admin are allowed to navigate to this route.",
"notLoggedIn": "You have to login to access this route."
},
"relationships": {
"pending": "Cancel Friend Request",
"notFriends": "Send Friend Request",
"pendingCanAccept": "Accept Friend Request",
"accepted": "Remove friend"
},
"modifyUser": {
"title": "Modify User",
"text": "Modify user badges"
},
"home": {
"globalWall": "Global Wall",
"news": "Kaverti News"
},
"badges": {
"admin": "Admin",
"bot": "Bot",
"add": "+",
"system": "System",
"banned": "Banned",
"hidden": "Hidden",
"booster": "Discord Booster"
},
"user": {
"title": "Loading",
"about": "About",
"more": "More of",
"posts": "Posts",
"threads": "Threads",
"inventory": "Inventory",
"awards": "Awards",
"items": "Items",
"wall": "User Wall",
"description": "Description",
"created": "Registered at",
"defaultDesc": "Hi, I'm ",
"marketplace": "Published items",
"relationships": "Friends",
"wearing": "Wearing",
"inventoryTab": {
"buyNow": "Buy now for ",
"was": "was",
"unavailable": "Item is unavailable",
"noItems": "У этого пользователя еще нет товаров в инвентаре!",
"onSale": "Item is on sale"
}
},
"stats": {
"title": "Stats",
"users": "Registered users",
"purchased": "Purchased items",
"items": "Uploaded items",
"posts": "Forum posts",
"threads": "Threads",
"teams": "Teams"
},
"settings": {
"title": "User Settings",
"menu": {
"general": "General",
"security": "Account & Security",
"experiments": "Experiments",
"about": "About",
"title": "Settings"
},
"general": {
"title": "General",
"about": "About",
"description": "Description",
"hi": "Hi, I'm",
"saveDesc": "Save Description",
"savePref": "Save Preferences",
"preferences": "Preferences",
"devMode": "Developer Mode"
},
"security": {
"title": "Security",
"password": {
"title": "Changing your password",
"oldPassword": "Please enter your existing password",
"newPassword": "Please enter your new desired password",
"newPasswordConfirm": "Please re-enter your desired password",
"change": "Change password (You will be logged out)"
},
"email": {
"title": "Change email address",
"newEmail": "Enter your new email address",
"change": "Change",
"verified": "Email Verified: ",
"verifiedTrue": "Yes",
"verifiedFalse": "No",
"current": "Your email is: "
},
"resend": {
"resend": "Resend Email Verification"
},
"session": {
"title": "Invalidate all sessions",
"subtitle": "Using this feature will log you out of all devices, including this one!",
"invalidate": "Invalidate sessions"
}
},
"privacy": {
"title": "Privacy"
},
"experiments": {
"title": "Experiments"
},
"about": {
"title": "About"
}
},
"languages": {
"title": "Locale Selector",
"en": "English",
"nl": "Nederlands",
"wind": "Windspeak",
"fr": "Français",
"zh-cn": "简体中文",
"zh-tw": "繁體中文",
"ru": "русский",
"debug": "Debug"
},
"admin": {
"title": "Kaverti Admin",
"dashboard": "Dashboard (SOON)",
"uploadItem": "Create Hat",
"executive": {
"title": "Executive Staff",
"soon": "(SOON)"
}
},
"marketplace": {
"hats": "Hats",
"faces": "Faces",
"shirts": "Shirts",
"pants": "Pants",
"collections": "Collections",
"moreInfo": "More info",
"filter": "Filters",
"search": "Search the Marketplace"
},
"update": {
"title": "Changelog for new update"
},
"marketplaceItem": {
"moreInfo": "Information and Stats",
"price": "Price",
"originalPrice": "Original Price",
"creator": "The Creator"
},
"friends": {
"pendingCanAccept": "Requests to you",
"pending": "Requests from you",
"accepted": "Accepted requests"
},
"feedback": {
"title": "Route Feedback",
"email": "Email we can get back to you with:",
"route": "Route you are providing feedback for:",
"rating": "Rating",
"text": "How can we improve?",
"submit": "Submit"
},
"guided": {
"registration": {
"title": "Welcome to Kaverti",
"desc": "Let's get started...",
"account": "Account",
"information": "Info",
"customization": "Customization",
"finish": "Finish",
"continue": "Continue",
"init": {
"login": "Login"
},
"info": {
"description": "Your chosen description:",
"placeholder": "Say something interesting about yourself."
},
"customize": {
"light": "Light",
"dark": "Dark",
"amoled": "AMOLED",
"highContrast": "High Contrast",
"theme": "Select your preferred theme:"
},
"finishing": {
"home": "Start using Kaverti"
}
},
"tCreate": {
}
},
"avatar": {
"reRender": "Re-render avatar",
"hats": "Hats",
"faces": "Faces",
"shirts": "Shirts",
"pants": "Pants",
"collections": "Collections",
"debug": "Debug"
},
"currency": "Koins",
"close": "Cancel",
"tos": "Terms of Service",
"gotIt": "Got it!",
"OK": "OK",
"errorModalTitle": "Something went wrong..."
}

203
src/locales/wind.json Normal file
View file

@ -0,0 +1,203 @@
{
"404": {
"title": "systemctl start httpd??",
"text": "Error 521 Ray ID: 4f3226667865dc3b how to fix",
"quoteText": "There is currently 2900 WIND quotes available",
"windQuote": "without https works",
"home": "£1m"
},
"login": {
"title": "dont tell anyone the new domain",
"login": "im never firing you btw your my best friend xzd xd",
"loginPassword": "I mean cyrex would still have the £75 but I'll give user it back bit by bit",
"loginUsername": "u wanna help now?",
"doNotSaveAuth": "yo yo",
"register": "Don't have an account?"
},
"register": {
"title": "no I am not, I am wlnd, aka Alex",
"text": "i just need the phpmyadmin login details",
"username": "honestly go fuck yourself",
"email": "this is fucking dumb",
"password": "would mind doing me a favour",
"confirm": "dont tell anyone",
"login": "can i get my twitter handle back lol",
"agree": "Price has been reduced to £10 "
},
"teams": {
"createTeam": "Create Team",
"joinTeam": "Join Team",
"join": "Join",
"invite": "Invite",
"viewPermissions": "View role permissions",
"devBanner": "Teams are currently in development, expect missing features.",
"view": "View",
"viewTeam": "View Team",
"memberRoles": "Members and Roles",
"members": "Members",
"roles": "Roles",
"items": "Created Items",
"foundedAt": "Team was founded at",
"teamWall": "Team Wall",
"teamWallText": "'s Team Wall",
"verified": "Verified Team",
"admin": {
"text": "Team Administration",
"nav": {
"general": "General",
"roles": "Roles",
"members": "Members",
"privacy": "Privacy",
"invites": "Invites",
"forum": "Forum",
"verification": "Verification"
},
"general": {
"title": "General",
"name": "Name",
"description": "Description",
"saveTeam": "Save Team",
"modifyPicture": "Modify Team avatar"
},
"roles": {
"title": "Roles",
"addRole": "Add Role",
"saveOrder": "Save role order",
"modifying": "Modifying",
"name": "Chosen role name",
"permissions": "Permissions",
"creating": "Creating a role"
},
"members": {
"title": "Members",
"modifyRoles": "Modify user roles",
"removeAllRoles": "Remove all roles from user"
},
"privacy": {
"title": "Team Privacy",
"teamWall": "Opt out of team walls",
"disallowForum": "Disallow anyone from viewing/creating on your Team Forum"
},
"invites": {
"title": "Invites",
"code": "Code",
"uses": "Uses",
"maxUses": "Max Uses",
"createdBy": "Created by",
"date": "Date",
"delete": "Delete selected",
"generate": "Generate invite"
},
"invite": {
"title": "Invite people to",
"amountUses": "Amount of uses (0 is Unlimited)",
"role": "Please select a role for the user to be auto assigned (optional)",
"refresh": "Refresh",
"inviteURL": "Invite URL",
"domain": "https://kaverti.com/invite/"
}
},
"permissionTypes": {
"inviteUsers": "Invite users",
"administrator": "Administrator",
"modifyRoles": "Modify roles/permissions/users",
"modifyTeamSettings": "Modify team settings",
"teamForum": "Modify team forum configuration",
"forumModerator": "Forum moderation permissions",
"forumAdmin": "Forum administrator",
"submitMarketplace": "Submit Marketplace items",
"priorityValue": "Set priority value"
}
},
"navbar": {
"home": "ok £50 extra",
"forums": "can u fix that for £10 extra",
"marketplace": "£30 Its the last thing im asking for troplo.",
"downloads": "dont tell anyone who i am here",
"games": "have u seen bloxtopia's games",
"users": "as i was not payed yet",
"teams": "leave me alone",
"dev": {
"title": "i might come back to development",
"fakeUser": "user : root",
"debug": "fixed the hta"
},
"user": {
"title": "Unknown",
"profile": "My Profile",
"creations": "My Creations",
"downloads": "Downloads",
"avatar": "My Avatar",
"transactions": "Transactions",
"settings": "Settings",
"logout": "Logout"
},
"more": {
"title": "a",
"twitter": "Twitter",
"discord": "Discord",
"roadmap": "Roadmap",
"documentation": "API Docs",
"stats": "Kaverti Stats"
},
"register": "u got the .net?",
"login": "/phpmyadmin"
},
"debug": {
"title": "Debug mode enabled",
"authUser": "Authenticated user",
"state": "State dump",
"userState": "User state dump",
"token": "Auth token in state",
"disable": "Disable debug options",
"auth": "Test authentication"
},
"errors": {
"authFail": "i control the files",
"devBuild": "ok so i put this and it instantly redirects to unbale",
"disableDebug": "Debug mode disabled, you will no longer have access to development features until you refresh.",
"authSuccess": "Request successful, your token is valid, and the Kaverti server instance is running correctly."
},
"user": {
"title": "Loading",
"about": "About",
"more": "More of",
"posts": "Posts",
"threads": "Threads",
"inventory": "Inventory",
"awards": "Awards",
"items": "Items",
"wall": "User Wall",
"description": "Description",
"created": "Registered at"
},
"stats": {
"title": "Stats",
"users": "Registered users",
"purchased": "Purchased items",
"items": "Uploaded items",
"posts": "Forum posts",
"threads": "Threads",
"teams": "Teams"
},
"settings": {
"title": "User Settings",
"general": {
"title": "General"
},
"security": {
"title": "Security"
}
},
"languages": {
"title": "(Locale Select) can you put out an announcement on the kaverti server",
"en": "(English) ill pay extra with the tet domain if u do £50 infact £100",
"wind": "(Windspeak) are you having a bubble",
"debug": "(Debug) hello mr trooooplooo"
},
"currency": "fuck you",
"close": "I've just told the full truth to logan",
"tos": "get the fuck over it, it was never a scam",
"gotIt": "that is wind for you",
"errorModalTitle": "{INSERT PHP ERROR} We'll you are getting paid alot"
}

View file

@ -1,67 +1,68 @@
import Vue from "vue"; import Vue from 'vue'
import App from "./App.vue"; import App from './App.vue'
import router from "./router"; import router from './router'
import store from "./store"; import store from './store'
import Buefy, { Snackbar } from "buefy"; import Buefy, {Snackbar} from 'buefy'
import axios from "axios"; import axios from 'axios'
import VueAxios from "vue-axios"; import VueAxios from 'vue-axios'
import i18n from "./i18n"; import i18n from './i18n'
import moment from "moment"; import moment from 'moment'
import VMdEditor from "@kangc/v-md-editor"; import VMdEditor from '@kangc/v-md-editor';
import "@kangc/v-md-editor/lib/style/base-editor.css"; import '@kangc/v-md-editor/lib/style/base-editor.css';
import enUS from "@kangc/v-md-editor/lib/lang/en-US"; import enUS from '@kangc/v-md-editor/lib/lang/en-US';
import createHljsTheme from "@kangc/v-md-editor/lib/theme/hljs"; import createHljsTheme from '@kangc/v-md-editor/lib/theme/hljs';
import json from "highlight.js/lib/languages/json"; import json from 'highlight.js/lib/languages/json';
const hljsTheme = createHljsTheme(); const hljsTheme = createHljsTheme();
import io from "socket.io-client"; import io from 'socket.io-client'
import VueSocketIO from "vue-socket.io"; import VueSocketIO from "vue-socket.io";
import NProgress from "vue-nprogress"; import NProgress from "vue-nprogress";
Vue.use(NProgress)
Vue.use(NProgress); const nprogress = new NProgress()
const nprogress = new NProgress();
Vue.use( Vue.use(
new VueSocketIO({ new VueSocketIO({
debug: true, debug: true,
connection: io(process.env.VUE_APP_GATEWAY_ENDPOINT), // options object is Optional connection: io(process.env.VUE_APP_GATEWAYENDPOINT), // options object is Optional
}) })
); );
Vue.use(VMdEditor); Vue.use(VMdEditor)
Vue.use(VueAxios, axios); VMdEditor.lang.use('en-US', enUS);
Vue.use(Buefy);
Vue.config.productionTip = false;
Vue.prototype.$snackbar = Snackbar;
axios.defaults.headers.common["Authorization"] = localStorage.getItem("token")
// BBCode Configuration
VMdEditor.lang.use("en-US", enUS);
hljsTheme.extend((md, hljs) => { hljsTheme.extend((md, hljs) => {
md.set({ md.set({
html: false, html: false, // Enable HTML tags in source
xhtmlOut: false, xhtmlOut: false, // Use '/' to close single tags (<br />).
breaks: true, // This is only for full CommonMark compatibility.
langPrefix: "language-", breaks: true, // Convert '\n' in paragraphs into <br>
linkify: true, langPrefix: 'language-', // CSS language prefix for fenced blocks. Can be
// useful for external highlighters.
linkify: true, // Autoconvert URL-like text to links
image: false, image: false,
// Enable some language-neutral replacement + quotes beautification
typographer: true, typographer: true,
quotes: "“”‘’"
});
md.disable("image");
hljs.registerLanguage("json", json);
});
// Date Format Configuration // Double + single quotes replacement pairs, when typographer enabled,
Vue.filter("formatDate", function(value) { // and smartquotes on. Could be either a String or an Array.
//
// For example, you can use '«»„“' for Russian, '„“‚‘' for German,
// and ['«\xA0', '\xA0»', '\xA0', '\xA0'] for French (including nbsp).
quotes: '“”‘’'
})
md.disable('image')
hljs.registerLanguage('json', json);
});
Vue.use(VueAxios, axios)
Vue.use(Buefy)
Vue.config.productionTip = false
Vue.prototype.$snackbar = Snackbar
Vue.filter('formatDate', function(value) {
if (value) { if (value) {
return moment(String(value)).format("hh:mm A, DD/MM/YYYY"); return moment(String(value)).format('hh:mm A, DD/MM/YYYY')
} }
}); })
new Vue({ new Vue({
nprogress, nprogress,
router, router,
store, store,
i18n, i18n,
render: h => h(App) render: h => h(App)
}).$mount("#app"); }).$mount('#app')

View file

@ -171,27 +171,11 @@ const routes = [{
{ {
path: '/admin', path: '/admin',
component: route('Admin'), component: route('Admin'),
redirect: "/admin/dashboard",
children: [ children: [
{ path: 'dashboard', component: route('AdminDashboard') }, { path: 'dashboard', component: route('AdminDashboard') },
{ path: 'item', component: route('AdminCreateItem') }, { path: 'item', component: route('AdminCreateItem') },
] ]
}, },
{
path: '/settings',
component: route('Settings'),
redirect: "/settings/general",
children: [
{ path: 'general', component: route('SettingsGeneral') },
{ path: 'security', component: route('SettingsSecurity') },
{ path: 'about', component: route('SettingsAbout') },
]
},
{
path: '/verify/:code',
name: 'EmailVerify',
component: route('EmailVerify')
},
{ {
path: '*', path: '*',
name: '404', name: '404',

View file

@ -10,7 +10,7 @@ export default new Vuex.Store({
wind: false, wind: false,
enableBrokenRoutes: false, enableBrokenRoutes: false,
client: { client: {
clientVersion: process.env.VUE_APP_VERSION, clientVersion: '1.0.0-prerelease4',
latestClientVersion: '', latestClientVersion: '',
latestAPIVersion: '', latestAPIVersion: '',
bannerText: '', bannerText: '',
@ -20,12 +20,7 @@ export default new Vuex.Store({
name: "Kaverti", name: "Kaverti",
logo: '', logo: '',
icon: '', icon: '',
release: process.env.VUE_APP_RELEASE, release: process.env.VUE_APP_RELEASE
development: window.location.hostname === 'dev.kaverti.flowinity' || window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1',
secure: window.location.protocol === "https:",
domain: window.location.hostname,
buildDate: process.env.VUE_APP_BUILD_DATE,
lang: 'debug'
}, },
errors: { errors: {
errors: null, errors: null,
@ -180,18 +175,6 @@ export default new Vuex.Store({
}, },
setCurrentConversation(state, id) { setCurrentConversation(state, id) {
state.user.currentConversation = id state.user.currentConversation = id
},
setSecure(state, value) {
state.client.secure = value;
},
issueLogout(state) {
state.user.username = ''
state.user.token = ''
state.user.koins = 0
state.user.id = 0
},
setLang(state, value) {
state.client.lang = value
} }
}, },
actions: {}, actions: {},

File diff suppressed because it is too large Load diff

View file

@ -18,21 +18,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="columns is-centered" v-if="$store.state.user.modeler && !$store.state.user.admin"> <div class="column" v-if="!$store.state.user.admin">
<div class="column is-2">
<b-menu class="box">
<b-menu-list :label="$t('admin.title')">
<b-menu-item @click="$router.push('/admin/item')" :label="$t('admin.uploadItem')"></b-menu-item>
</b-menu-list>
</b-menu>
</div>
<div class="column is-9">
<div class="box">
<router-view></router-view>
</div>
</div>
</div>
<div class="column" v-if="!$store.state.user.admin && !$store.state.user.modeler">
<div class="box"> <div class="box">
<div class="is-vcentered has-text-centered columns"> <div class="is-vcentered has-text-centered columns">
<div class="column is-vcentered"> <div class="column is-vcentered">

View file

@ -103,7 +103,7 @@ export default {
data.append('image', this.item.file); data.append('image', this.item.file);
data.append('fileObj', this.item.fileObj); data.append('fileObj', this.item.fileObj);
this.axios.post(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'marketplace/preview/' + this.createType, data) this.axios.post(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'marketplace/preview/' + this.createType, data)
.then((res) => { .then((res) => {
this.loadingPreview = false this.loadingPreview = false
this.preview = res.data.image this.preview = res.data.image
@ -125,10 +125,10 @@ export default {
data.append('onSalePrice', this.item.onSalePrice); data.append('onSalePrice', this.item.onSalePrice);
data.append('limited', this.item.limited); data.append('limited', this.item.limited);
data.append('quantityAllowed', this.item.quantity); data.append('quantityAllowed', this.item.quantity);
this.axios.post(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'marketplace/upload/' + this.createType, data) this.axios.post(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'marketplace/upload/' + this.createType, data)
.then((res) => { .then((res) => {
this.loading = false this.loading = false
this.axios.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'marketplace/rerender/' + res.data.id) this.axios.put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'marketplace/rerender/' + res.data.id)
}).catch((e) => { }).catch((e) => {
this.loading = false this.loading = false
AjaxErrorHandler(this.$store)(e) AjaxErrorHandler(this.$store)(e)

View file

@ -5,8 +5,8 @@
<div class="column is-3 has-text-centered"> <div class="column is-3 has-text-centered">
<h1 class="title">{{$store.state.user.username}}</h1> <h1 class="title">{{$store.state.user.username}}</h1>
<div class="box has-text-centered"> <div class="box has-text-centered">
<img :src="'https://cdn.kaverti.com/user/avatars/full/' + $store.state.user.avatar + '.png'"><br> <img :src="'https://cdn.kaverti.com/user/avatars/full/' + $store.state.user.avatar + '.png'">
<b-button :loading="refreshAvatarLoading" class="is-info" @click="refresh()">{{$t('avatar.reRender')}}</b-button> <b-button :loading="refreshAvatarLoading" class="is-info" @click="refresh()">Re-render</b-button>
</div> </div>
</div> </div>
<div class="column"> <div class="column">
@ -25,7 +25,7 @@
<div class="column is-4 has-text-centered" v-for='(item) in items' :key='"inventory-item-" + item.id'> <div class="column is-4 has-text-centered" v-for='(item) in items' :key='"inventory-item-" + item.id'>
<h1 class="subtitle">{{item.Item.name}}</h1> <h1 class="subtitle">{{item.Item.name}}</h1>
<div class="box"> <div class="box">
<img :src="'https://cdn.kaverti.com/marketplace/avatars/' + item.Item.previewFile + '.png'"> <img :src="'https://cdn.kaverti.com/marketplace/avatars/full/' + item.Item.previewFile + '.png'">
<br> <br>
<b-button>Apply</b-button> <b-button>Apply</b-button>
</div> </div>
@ -61,7 +61,7 @@ export default {
refresh() { refresh() {
this.refreshAvatarLoading = true this.refreshAvatarLoading = true
this.axios this.axios
.post(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'users/render/refresh') .post(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'users/render/refresh')
.then(() => { .then(() => {
this.refreshAvatarLoading = false this.refreshAvatarLoading = false
}) })
@ -76,7 +76,7 @@ export default {
getItems() { getItems() {
this.loading = true; this.loading = true;
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'inventory/' + this.category) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'inventory/' + this.coreCategory)
.then(res => { .then(res => {
this.items = res.data.rows; this.items = res.data.rows;
this.count = res.data.count this.count = res.data.count

View file

@ -147,7 +147,7 @@ export default {
if(name.length) { if(name.length) {
this.axios this.axios
.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `chat/conversation/${this.$route.params.id}/name`, { name }) .put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `chat/conversation/${this.$route.params.id}/name`, { name })
.then(res => { .then(res => {
this.name = name; this.name = name;
res res
@ -189,7 +189,7 @@ export default {
this.loading = true; this.loading = true;
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `chat/conversation/${this.$route.params.id}?page=${this.page}`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `chat/conversation/${this.$route.params.id}?page=${this.page}`)
.then(res => { .then(res => {
this.loading = false; this.loading = false;
this.showModal = false; this.showModal = false;

View file

@ -1,43 +1,19 @@
<template> <template>
<div id="debug"> <main>
<section class="section">
<div class="container" v-if="!$store.state.client.development">
<div class="columns is-centered">
<div class="column"> <div class="column">
<div class="box"> <div class="box">
<div class="title"> {{$t('debug.title')}}: {{$store.state.debug}}
{{ $t("debug.title") }}: {{ store.state.debug }} <br>
<div v-if="$store.state.debug"> {{$t('debug.authUser')}}: {{$store.state.user.username}}<br>
{{$t('debug.userState')}}: {{$store.state.user}}<br>
{{$t('debug.state')}}: {{$store.state}}<br>
{{$t('debug.token')}}: {{$store.state.user.token}}
</div> </div>
<hr> <b-button v-if="$store.state.debug" @click="authTest">{{$t('debug.auth')}}</b-button>
<p>If you'd like to re-enable debug mode refresh.</p> <b-button v-if="$store.state.debug" @click="turnOffDebug">{{$t('debug.disable')}}</b-button>
</div> </div>
</div> </div>
</div> </main>
</div>
<div class="container" v-else>
<div class="columns is-centered">
<div class="column is-7">
<div class="box" style="overflow: none">
<div class="title">
{{ $t("debug.title") }}: {{ $store.state.client.development }}
</div>
<hr />
{{ $t("debug.authUser") }}: {{ $store.state.user.username }}<br />
{{ $t("debug.userState") }}: {{ $store.state.user }}<br />
{{ $t("debug.state") }}: {{ $store.state }}<br />
{{ $t("debug.token") }}: {{ $store.state.user.token }}
</div>
<b-button v-if="$store.state.client.development" @click="authTest">{{
$t("debug.auth")
}}</b-button>
<b-button v-if="$store.state.client.development" @click="turnOffDebug">{{
$t("debug.disable")
}}</b-button>
</div>
</div>
</div>
</section>
</div>
</template> </template>
<script> <script>
@ -45,29 +21,17 @@ export default {
name: "Debug", name: "Debug",
methods: { methods: {
turnOffDebug () { turnOffDebug () {
this.$store.commit("turnOffDebug"); this.$store.commit('turnOffDebug')
this.$buefy.snackbar.open({ this.$buefy.snackbar.open({message:this.$t('errors.disableDebug'), type: 'is-warning'})
message: this.$t("errors.disableDebug"),
type: "is-warning",
});
}, },
authTest () { authTest () {
this.axios this.axios.get('/api/v1/userinfo/auth'
.get(process.env.VUE_APP_API_ENDPOINT + ).then(() => {
process.env.VUE_APP_API_VERSION + "/userinfo/auth") this.$buefy.snackbar.open({message:this.$t('errors.authSuccess'), type: 'is-warning'})
.then(() => { }).catch(() => {
this.$buefy.snackbar.open({ this.$buefy.snackbar.open({message:this.$t('errors.authFail'), type: 'is-warning'})
message: this.$t("errors.authSuccess"),
type: "is-warning",
});
}) })
.catch(() => { }
this.$buefy.snackbar.open({ }
message: this.$t("errors.authFail"), }
type: "is-warning",
});
});
},
},
};
</script> </script>

View file

@ -1,78 +0,0 @@
<template>
<div id="email-verify">
<section class="section">
<div class="container">
<div class="column has-text-centered" v-if="!$store.state.user.emailVerified && !verified && !failed">
<div class="box">
<i class="large-icon fas fa-circle-notch fa-spin"></i>
<div class="title">Verifying your email</div>
<div class="subtitle">Please wait...</div>
</div>
</div>
<div class="column has-text-centered" v-if="failed">
<div class="box">
<i class="large-icon far fa-times-square"></i>
<div class="title">Something went wrong</div>
<div class="subtitle" v-for="fail in failReason" :key="'mailFail-' + fail">{{fail}}</div>
<b-button @click="retry">Retry</b-button>
</div>
</div>
<div class="column has-text-centered" v-if="verified">
<div class="box">
<div class="title">Your email has been verified.</div>
<div class="subtitle">Thank you, and enjoy using Kaverti.</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
import AjaxErrorHandler from "@/assets/js/errorHandler";
export default {
name: "EmailVerify",
data() {
return {
verified: false,
failed: false,
failReason: this.$store.state.errors.errors
}
},
methods: {
retry() {
this.axios.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/verify/` + this.$route.params.code)
.then(() => {
this.verified = true
this.failed = false
this.$store.commit('setEmailVerified', true)
})
.catch((e) => {
this.failed = true
this.verified = false
AjaxErrorHandler(this.$store)(e)
})
}
},
mounted() {
this.$nextTick(
this.axios.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/verify/` + this.$route.params.code)
.then(() => {
this.verified = true
this.failed = false
this.$store.commit('setEmailVerified', true)
})
.catch((e) => {
this.failed = true
this.verified = false
AjaxErrorHandler(this.$store)(e)
})
)
}
}
</script>
<style scoped>
</style>

View file

@ -1,33 +1,166 @@
<template> <template>
<div id="forum-thread"> <main class="section">
<b-modal v-model="postModal">
<div class="editor">
<editor-menu-bar :editor="editor" v-slot="{ commands, isActive }">
<div class="menubar">
<button
class="menubar__button"
:class="{ 'is-active': isActive.bold() }"
@click="commands.bold"
>
<icon name="bold" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.italic() }"
@click="commands.italic"
>
<icon name="italic" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.strike() }"
@click="commands.strike"
>
<icon name="strike" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.underline() }"
@click="commands.underline"
>
<icon name="underline" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.code() }"
@click="commands.code"
>
<icon name="code" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.paragraph() }"
@click="commands.paragraph"
>
<icon name="paragraph" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.heading({ level: 1 }) }"
@click="commands.heading({ level: 1 })"
>
H1
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.heading({ level: 2 }) }"
@click="commands.heading({ level: 2 })"
>
H2
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.heading({ level: 3 }) }"
@click="commands.heading({ level: 3 })"
>
H3
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.bullet_list() }"
@click="commands.bullet_list"
>
<icon name="ul" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.ordered_list() }"
@click="commands.ordered_list"
>
<icon name="ol" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.blockquote() }"
@click="commands.blockquote"
>
<icon name="quote" />
</button>
<button
class="menubar__button"
:class="{ 'is-active': isActive.code_block() }"
@click="commands.code_block"
>
<icon name="code" />
</button>
<button
class="menubar__button"
@click="commands.horizontal_rule"
>
<icon name="hr" />
</button>
<button
class="menubar__button"
@click="commands.undo"
>
<icon name="undo" />
</button>
<button
class="menubar__button"
@click="commands.redo"
>
<icon name="redo" />
</button>
</div> </div>
<!-- <main class="section">--> </editor-menu-bar>
<!-- <h1 class="title">{{thread.name}}&nbsp;<b-tag v-if="thread.locked">Locked</b-tag><b-button @click="replyToThread()"><i class="fas fa-reply-all"></i></b-button></h1>-->
<!-- <div class="">--> <editor-content class="editor__content" :editor="editor" />
<!-- <div class="column" v-for='(post) in thread.Posts' :key='"threadPost-" + post.id'>--> </div>
<!-- <article class="media box">--> </b-modal>
<!-- <figure class="media-left">--> <h1 class="title">{{thread.name}}&nbsp;<b-tag v-if="thread.locked">Locked</b-tag><b-button @click="replyToThread()"><i class="fas fa-reply-all"></i></b-button></h1>
<!-- <p class="image is-64x64">--> <div class="">
<!-- <img :src="'https://cdn.kaverti.com/user/avatars/headshot/' + post.User.picture + '.png'">--> <div class="column" v-for='(post) in thread.Posts' :key='"threadPost-" + post.id'>
<!-- </p>--> <article class="media box">
<!-- </figure>--> <figure class="media-left">
<!-- <div class="media-content">--> <p class="image is-64x64">
<!-- <div class="content">--> <img :src="'https://cdn.kaverti.com/user/avatars/headshot/' + post.User.picture + '.png'">
<!-- <p>--> </p>
<!-- <strong>{{post.User.username}}</strong> <small>{{ post.createdAt | formatDate }}</small>--> </figure>
<!-- <br>--> <div class="media-content">
<!-- <p>--> <div class="content">
<!-- <div v-html="post.content"></div>--> <p>
<!-- </div>--> <strong>{{post.User.username}}</strong> <small>{{ post.createdAt | formatDate }}</small>
<!-- </div>--> <br>
<!-- <div class="media-right">--> <p>
<!-- <b-button @click="replyToPost(post)"><i class="fas fa-reply"></i></b-button>--> <div v-html="post.content"></div>
<!-- </div>--> </div>
<!-- </article>--> </div>
<!-- </div>--> <div class="media-right">
<!-- </div>--> <b-button @click="replyToPost(post)"><i class="fas fa-reply"></i></b-button>
<!-- </main>--> </div>
</article>
</div>
</div>
</main>
</template> </template>
<script> <script>
@ -96,7 +229,7 @@ export default {
}, },
replyToPost(post) { replyToPost(post) {
this.postModal = true; post
}, },
getThread(initial) { getThread(initial) {
this.loading = true this.loading = true
@ -105,7 +238,7 @@ export default {
this.thread = [] this.thread = []
} }
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'forums/thread/' + this.$route.params.id) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'forums/thread/' + this.$route.params.id)
.then((res) => { .then((res) => {
if(initial) { if(initial) {
this.thread = res.data this.thread = res.data

View file

@ -27,12 +27,12 @@
> >
<NoItems connection="true"></NoItems> <NoItems connection="true"></NoItems>
</div> </div>
<div class="column is-9" v-if="!threads.length && !loadingThreads"> <div class="column is-7" v-if="!threads.length && !loadingThreads">
<div class="box"> <div class="box">
<NoItems type="forum threads"></NoItems> <NoItems type="forum threads"></NoItems>
</div> </div>
</div> </div>
<div class="column is-9" v-if="threads.length"> <div class="column is-7" v-if="threads.length">
<div class="content"> <div class="content">
<article <article
class="thread_display box" class="thread_display box"
@ -126,8 +126,8 @@ export default {
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"forums/category/" + "forums/category/" +
this.selectedCategory this.selectedCategory
@ -163,8 +163,8 @@ export default {
mounted() { mounted() {
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
"forums/category" "forums/category"
) )

View file

@ -1,51 +1,54 @@
<template> <template>
<div id="friends"> <main>
<section class="section"> <div class="section">
<div class="columns is-centered"> <h1 class="title has-text-centered">{{name}} ({{count}})</h1>
<div class="column is-7 has-text-centered">
<div class="title">{{ name }} ({{ count }})</div>
<div class="tabs is-centered"> <div class="tabs is-centered">
<ul> <ul>
<router-link tag="li" :to="'/friends/pendingCanAccept'" exact><a>{{ $t('friends.pendingCanAccept') }}</a> <router-link tag="li" :to="'/friends/pendingCanAccept'" exact><a>{{ $t('friends.pendingCanAccept') }}</a></router-link>
</router-link>
<router-link tag="li" :to="'/friends/pending'" exact><a>{{ $t('friends.pending') }}</a></router-link>
<router-link tag="li" :to="'/friends/accepted'" exact><a>{{ $t('friends.accepted') }}</a></router-link> <router-link tag="li" :to="'/friends/accepted'" exact><a>{{ $t('friends.accepted') }}</a></router-link>
<router-link tag="li" :to="'/friends/pending'" exact><a>{{ $t('friends.pending') }}</a></router-link>
</ul> </ul>
</div> </div>
<div class="columns is-multiline" v-if="friends.length && !loading"> <div class="columns is-multiline" v-if="friends.length && !loading">
<div class="column is-3 has-text-centered" v-for='(friend) in friends' :key='"friend-" + friend.id'> <div class="column is-3 has-text-centered" v-for='(friend) in friends' :key='"friend-" + friend.id'>
<h1 class="title has-text-centered">{{friend.friend2.username}}</h1> <h1 class="title has-text-centered">{{friend.friend2.username}}</h1>
<div class="box"> <div class="box">
<img :src="'https://cdn.kaverti.com/user/avatars/full/' + friend.friend2.picture + '.png'" alt="Avatar"><br> <img :src="'https://cdn.kaverti.com/user/avatars/full/' + friend.friend2.picture + '.png'"><br>
<div class="buttons"> <div class="buttons">
<b-button @click="removeFriend(friend)" class="is-warning has-text-centered is-centered is-center" <b-button @click="removeFriend(friend)" class="is-warning has-text-centered is-centered is-center" v-if="friend.type === 'pending'"><i class="fas fa-minus"></i>&nbsp;Cancel Friend Request</b-button>
v-if="friend.type === 'pending'"><i class="fas fa-minus"></i>&nbsp;Cancel Friend Request <b-button @click="removeFriend(friend)" class="is-warning has-text-centered is-centered is-center" v-if="friend.type === 'pendingCanAccept'"><i class="fas fa-minus"></i>&nbsp;Deny Friend Request</b-button>
</b-button> <b-button @click="doRelationshipAccept(friend)" class="is-success has-text-centered is-centered is-center" v-if="friend.type === 'pendingCanAccept'"><i class="fas fa-plus"></i>&nbsp;Accept Friend Request</b-button>
<b-button @click="removeFriend(friend)" class="is-warning has-text-centered is-centered is-center" <b-button @click="removeFriend(friend)" class="is-danger has-text-centered is-centered is-center" v-if="friend.type === 'accepted'"><i class="fas fa-minus"></i>&nbsp;Remove Friend</b-button>
v-if="friend.type === 'pendingCanAccept'"><i class="fas fa-minus"></i>&nbsp;Deny Friend
Request
</b-button>
<b-button @click="doRelationshipAccept(friend)"
class="is-success has-text-centered is-centered is-center"
v-if="friend.type === 'pendingCanAccept'"><i class="fas fa-plus"></i>&nbsp;Accept Friend
Request
</b-button>
<b-button @click="removeFriend(friend)" class="is-danger has-text-centered is-centered is-center"
v-if="friend.type === 'accepted'"><i class="fas fa-minus"></i>&nbsp;Remove Friend
</b-button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="section" v-if="!friends.length && !loading">
<NoItems type="friends"></NoItems>
</div>
<div class="section columns" v-if="loading">
<div class="column">
<div class="box">
<b-skeleton></b-skeleton>
</div> </div>
</div> </div>
</section> <div class="column">
<div class="box">
<b-skeleton></b-skeleton>
</div> </div>
</div>
<div class="column">
<div class="box">
<b-skeleton></b-skeleton>
</div>
</div>
</div>
</div>
</main>
</template> </template>
<script> <script>
import AjaxErrorHandler from ".././assets/js/errorHandler"; import AjaxErrorHandler from ".././assets/js/errorHandler";
import NoItems from "../components/NoItems" import NoItems from "../components/NoItems"
export default { export default {
name: 'Friends', name: 'Friends',
components: { components: {
@ -62,85 +65,81 @@ export default {
}, },
watch: { watch: {
$route () { $route () {
this.loading = true; this.loading = true
this.friends = []; this.friends = []
this.offset = 0; this.offset = 0
this.category = this.$route.params.category; this.category = this.$route.params.category
if(this.category === 'pendingCanAccept') { if(this.category === 'pendingCanAccept') {
this.name = "Requests to you"; this.name = "Requests to you"
} else if(this.category === 'pending') { } else if(this.category === 'pending') {
this.name = "Requests from you"; this.name = "Requests from you"
} else if(this.category === 'accepted') { } else if(this.category === 'accepted') {
this.name = "Accepted Requests"; this.name = "Accepted Requests"
} else { } else {
this.name = "Unknown"; this.name = "Unknown"
} }
this.getItems(); this.getItems()
} }
}, },
methods: { methods: {
removeFriend (user) { removeFriend (user) {
this.axios this.axios
.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'relationships/remove', { .put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'relationships/remove', {
friend: user.friend2.username friend: user.friend2.username
}) })
.then(() => { .then(() => {
this.getItems(); this.getItems()
}) })
.catch(e => { .catch(e => {
this.getItems(); this.getItems()
AjaxErrorHandler(this.$store)(e); AjaxErrorHandler(this.$store)(e)
}); })
}, },
doRelationshipAccept (user) { doRelationshipAccept (user) {
this.axios this.axios
.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'relationships/accept', { .put(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'relationships/accept', {
friend: user.friend2.username friend: user.friend2.username
}) })
.then(() => { .then(() => {
this.getItems(); this.getItems()
}) })
.catch(e => { .catch(e => {
this.getItems(); this.getItems()
AjaxErrorHandler(this.$store)(e); AjaxErrorHandler(this.$store)(e)
}); })
}, },
getItems () { getItems () {
this.loading = true; this.loading = true
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'relationships/getAll/' + this.category) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'relationships/getAll/' + this.category)
.then(res => { .then(res => {
this.friends = res.data.rows; this.friends = res.data.rows
this.count = res.data.count; this.count = res.data.count
this.loading = false; this.loading = false
}) })
.catch((e) => { .catch((e) => {
this.loading = false; this.loading = false
AjaxErrorHandler(this.$store)(e)
AjaxErrorHandler(this.$store)(e);
}) })
}, },
}, },
mounted() { mounted() {
if (this.$store.state.user.username) { this.loading = true
this.loading = true; this.friends = []
this.friends = []; this.offset = 0
this.offset = 0; this.category = this.$route.params.category
this.category = this.$route.params.category;
if(this.category === 'pendingCanAccept') { if(this.category === 'pendingCanAccept') {
this.name = "Requests to you"; this.name = "Requests to you"
} else if(this.category === 'pending') { } else if(this.category === 'pending') {
this.name = "Requests from you"; this.name = "Requests from you"
} else if(this.category === 'accepted') { } else if(this.category === 'accepted') {
this.name = "Accepted Requests"; this.name = "Accepted Requests"
} else { } else {
this.name = "Unknown"; this.name = "Unknown"
}
this.getItems();
} }
this.getItems()
} }
} }
</script> </script>

View file

@ -8,21 +8,13 @@
<div class="title"> <div class="title">
{{ $store.state.user.username }} {{ $store.state.user.username }}
</div> </div>
<img <img :src="'https://cdn.kaverti.com/user/avatars/full/' + $store.state.user.avatar + '.png'" alt="Avatar" width="50%">
:src="
'https://cdn.kaverti.com/user/avatars/full/' +
$store.state.user.avatar +
'.png'
"
alt="Avatar"
class="is-centered"
/>
</div> </div>
<div class="title"> <div class="title">
{{ $t("home.news") }} {{ $t('home.news') }}
</div> </div>
<div v-if="blogs.length"> <div v-if="blogs.length">
<div class="box" v-for="blog in blogs" :key="'blog-' + blog.id"> <div class="box" v-for='(blog) in blogs' :key='"blog-" + blog.id'>
<div class="subtitle"> <div class="subtitle">
{{ blog.name }} {{ blog.name }}
</div> </div>
@ -35,55 +27,31 @@
</div> </div>
</div> </div>
</div> </div>
<div class="column is-8" v-if="!loading"> <div class="column is-7" v-if="!loading">
<div class="box"> <div class="box">
<div class="title"> <div class="title">
{{ $t("home.globalWall") }} {{ $t('home.globalWall') }}
</div> </div>
<b-input <b-input type="textarea" maxlength="256" placeholder="How's it going?" v-model="wallText"></b-input>
type="textarea"
maxlength="256"
placeholder="How's it going?"
v-model="wallText"
></b-input>
<b-tag type="is-info" class="is-pulled-right"> <b-tag type="is-info" class="is-pulled-right">
Markdown is no longer available on wall posts. Markdown is no longer available on wall posts.
</b-tag> </b-tag>
<b-button <b-button type="is-info" ckass="is-pulled-left" :loading="loadingWallButton" @click="postWall">Post</b-button>
type="is-info"
ckass="is-pulled-left"
:loading="loadingWallButton"
@click="postWall"
>Post</b-button
>
</div> </div>
<hr /> <hr>
<div <div class="box" v-for='(post) in wallPosts' :key='"wallPosts-" + post.id'>
class="box"
v-for="post in wallPosts"
:key="'wallPosts-' + post.id"
>
<article class="media"> <article class="media">
<figure class="media-left"> <figure class="media-left">
<figure class="image is-64x64 is-rounded"> <figure class="image is-64x64 is-rounded">
<img <img :src="'https://cdn.kaverti.com/user/avatars/headshot/' + post.fromUser.picture + '.png'" alt="Avatar" class="is-rounded">
:src="
'https://cdn.kaverti.com/user/avatars/headshot/' +
post.fromUser.picture +
'.png'
"
alt="Avatar"
class="is-rounded"
/>
</figure> </figure>
</figure> </figure>
<div class="media-content"> <div class="media-content">
<div class="content"> <div class="content">
<p> <p>
<strong>{{ post.fromUser.username }}</strong <strong>{{ post.fromUser.username }}</strong>&nbsp;
>&nbsp;
<small>{{ post.createdAt | formatDate() }}</small> <small>{{ post.createdAt | formatDate() }}</small>
<br /> <br>
{{ post.plainText }} {{ post.plainText }}
</p> </p>
</div> </div>
@ -99,24 +67,105 @@
</div> </div>
</div> </div>
</section> </section>
<section <section class="section hero is-info is-large is-fullheight-with-navbar" v-if="!$store.state.user.username">
class="hero is-info is-large is-fullheight-with-navbar"
v-if="!$store.state.user.username"
>
<div class="hero-body"> <div class="hero-body">
<div class="container has-text-centered"> <div class="container has-text-centered">
<div class="title">Kaverti</div> <div class="title">
Kaverti
</div>
<div class="subtitle"> <div class="subtitle">
Kaverti is a new 3D sandbox gaming platform, and avatar social Kaverti is a new 3D sandbox gaming platform, and avatar social website.
website. <br>
<br />
Kaverti is home to hundreds of users who enjoy using it Kaverti is home to hundreds of users who enjoy using it
<br /> <br>
So why not sign up today! So why not sign up today!
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<section class="section hero is-white is-medium" v-if="!$store.state.user.username">
<div class="hero-body">
<div class="container has-text-centered">
<div class="title">
Statistics
</div>
<div class="columns is-centered">
<div class="column has-text-centered">
<div class="title">{{ $t('stats.users') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ users }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.users') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ users }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.posts') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ posts }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.users') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ users }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.purchased') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ inventory }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.items') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ items }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.teams') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ teams }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
<div class="column has-text-centered">
<div class="title">{{ $t('stats.threads') }}</div>
<div class="box">
<div class="title" v-if="!loading">
{{ threads }}
</div>
<b-skeleton size="is-large" :active="loading" :count="2"></b-skeleton>
</div>
</div>
</div>
</div>
</div>
</section>
</div> </div>
</template> </template>
@ -125,87 +174,83 @@ import NoItems from "@/components/NoItems";
import AjaxErrorHandler from ".././assets/js/errorHandler"; import AjaxErrorHandler from ".././assets/js/errorHandler";
export default { export default {
name: "Home", name: 'Home',
components: { components: {
NoItems, NoItems
}, },
data() { data() {
return { return {
blogs: [], blogs: [],
wallOffset: 0, wallOffset: 0,
wallPosts: [], wallPosts: [],
wallText: "", wallText: '',
mentions: "", mentions: '',
loadingWallButton: false, loadingWallButton: false,
loadingWall: true, loadingWall: true,
}; users: 0,
posts: 0,
inventory: 0,
teams: 0,
threads: 0,
items: 0,
loading: false
}
}, },
methods: { methods: {
postWall() { postWall() {
this.loadingWallButton = true; this.loadingWallButton = true
this.axios this.axios.post(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `wall/post`, {
.post(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
`/` +
`wall/post`,
{
username: "GlobalWall", username: "GlobalWall",
content: this.wallText, content: this.wallText
} }).then(() => {
) this.loadingWallButton = false
.then(() => { this.getWall(true)
this.loadingWallButton = false; }).catch(e => {
this.getWall(true); this.loadingWallButton = false
AjaxErrorHandler(this.$store)(e)
}) })
.catch((e) => {
this.loadingWallButton = false;
AjaxErrorHandler(this.$store)(e);
});
}, },
getWall(initial) { getWall(initial) {
this.loadingWall = true; this.loadingWall = true
if(initial) { if(initial) {
this.wallOffset = 0; this.wallOffset = 0
} }
this.axios this.axios
.get( .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `user/GlobalWall?wall=true&offset=` + this.wallOffset)
process.env.VUE_APP_API_ENDPOINT + .then(res => {
process.env.VUE_APP_API_VERSION + this.loadingPosts = false
`/` + this.loadingWall = false
`user/GlobalWall?wall=true&offset=` +
this.wallOffset
)
.then((res) => {
this.loadingPosts = false;
this.loadingWall = false;
if(initial) { if(initial) {
this.wallPosts = res.data.userWalls; this.wallPosts = res.data.userWalls
} else { } else {
this.wallPosts.push(...res.data.userWalls); this.wallPosts.push(...res.data.userWalls)
} }
});
},
getBlog() {
this.axios
.get(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
`/` +
`blog/posts`
)
.then((res) => {
this.blogs = res.data;
}) })
.catch((e) => {
AjaxErrorHandler(this.$store)(e);
});
} }
}, },
mounted() { mounted() {
this.getBlog() this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'kaverti/stats')
this.getWall(true); .then(res => {
}, this.users = res.data.users
}; this.posts = res.data.posts
this.inventory = res.data.inventory
this.items = res.data.items
this.teams = res.data.teams
this.threads = res.data.threads
this.loading = false
}).catch(() => {
this.$buefy.snackbar.open({message:this.$t('errors.authFail'), type: 'is-warning'})
})
this.axios
.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `blog/posts`)
.then(res => {
this.blogs = res.data
})
.catch(e => {
AjaxErrorHandler(this.$store)(e)
})
this.getWall(true)
}
}
</script> </script>

View file

@ -45,9 +45,13 @@
@loadNext='getItems(false)' @loadNext='getItems(false)'
> >
<div class="column is-3 has-text-centered" style="float: left;" v-for='(item) in items' :key='"marketplace-" + item.id'> <div class="column is-3 has-text-centered" style="float: left;" v-for='(item) in items' :key='"marketplace-" + item.id'>
<router-link :to="'/m/' + item.id" class="subtitle has-text-centered">{{item.name}}</router-link>
<div class="box"> <div class="box">
<router-link :to="'/m/' + item.id" class="subtitle has-text-centered">{{item.name}}</router-link><br>
<img :src="'https://cdn.kaverti.com/marketplace/avatars/' + item.previewFile + '.png'" width="40%"> <img :src="'https://cdn.kaverti.com/marketplace/avatars/' + item.previewFile + '.png'" width="40%">
<div class="buttons is-centered is-center">
<b-button class="is-info" v-if="!item.saleEnabled">{{$t('user.inventoryTab.buyNow')}} {{item.price}} Koins</b-button>
<b-button class="is-success" v-if="item.saleEnabled">{{$t('user.inventoryTab.buyNow')}} {{item.salePrice}} Koins <b-tooltip class="is-success" :label="$t('user.inventoryTab.onSale')"><i class="fas fa-info-circle"></i></b-tooltip></b-button>
</div>
</div> </div>
</div> </div>
</Pagination> </Pagination>
@ -161,7 +165,7 @@ export default {
this.offset = 0 this.offset = 0
this.paginate = true this.paginate = true
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'marketplace/' + this.category + '?search=' + this.search + '&offset=' + this.offset) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'marketplace/' + this.category + '?search=' + this.search + '&offset=' + this.offset)
.then(res => { .then(res => {
this.items = res.data.Items this.items = res.data.Items
this.loading = false this.loading = false
@ -177,7 +181,7 @@ export default {
this.wait = true this.wait = true
} }
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'marketplace/' + this.category + '?offset=' + this.offset) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'marketplace/' + this.category + '?offset=' + this.offset)
.then(res => { .then(res => {
if(res.data.length < this.limit) { if(res.data.length < this.limit) {
this.offset = null; this.offset = null;

View file

@ -101,13 +101,13 @@ export default {
}, },
mounted() { mounted() {
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `marketplace/view/${this.$route.params.id}`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `marketplace/view/${this.$route.params.id}`)
.then(res => this.item = res.data, this.loading = false) .then(res => this.item = res.data, this.loading = false)
.catch((e) => { .catch((e) => {
AjaxErrorHandler(this.$store)(e) AjaxErrorHandler(this.$store)(e)
}) })
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `marketplace/check/${this.$route.params.id}`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `marketplace/check/${this.$route.params.id}`)
.then(res => this.purchased = res.data.purchased) .then(res => this.purchased = res.data.purchased)
} }
} }

View file

@ -53,10 +53,10 @@
required> required>
</b-input> </b-input>
</b-field> </b-field>
<b-checkbox v-model="register.init.agree">{{$t('register.agree')}} <router-link to="/legal/tos">{{$t('tos')}}</router-link></b-checkbox> <b-checkbox v-model="register.agree">{{$t('register.agree')}} <router-link @click="registerModal = false " to="/legal/tos">{{$t('tos')}}</router-link></b-checkbox>
<br> <br>
<div class="buttons"> <div class="buttons">
<b-button :disabled="!register.init.agree" class="is-info" @click="doInit" :loading="register.init.loading">{{$t('guided.registration.continue')}}</b-button> <b-button class="is-info" @click="doInit" :loading="register.init.loading">{{$t('guided.registration.continue')}}</b-button>
<b-button>{{$t('guided.registration.init.login')}}</b-button> <b-button>{{$t('guided.registration.init.login')}}</b-button>
</div> </div>
</section> </section>
@ -73,7 +73,7 @@
<div class="box"> <div class="box">
<form> <form>
<h2 class="subtitle has-text-centered">{{ $t('guided.registration.info.description') }}</h2> <h2 class="subtitle has-text-centered">{{ $t('guided.registration.info.description') }}</h2>
<b-input v-model="register.personal.description" :placeholder="$t('guided.registration.info.placeholder')" maxlength="256" type="textarea"></b-input> <b-input v-model="register.personal.description" maxlength="256" type="textarea"></b-input>
<b-button class="is-info" @click="doInfo()" :loading="register.personal.loading">{{$t('guided.registration.continue')}}</b-button> <b-button class="is-info" @click="doInfo()" :loading="register.personal.loading">{{$t('guided.registration.continue')}}</b-button>
</form> </form>
</div> </div>
@ -86,7 +86,6 @@
<div class="columns is-centered"> <div class="columns is-centered">
<div class="column"> <div class="column">
<div class="box"> <div class="box">
<h2 class="subtitle has-text-centered">{{ $t('guided.registration.customize.themeWarning') }}</h2>
<h2 class="subtitle has-text-centered">{{ $t('guided.registration.customize.theme') }}</h2> <h2 class="subtitle has-text-centered">{{ $t('guided.registration.customize.theme') }}</h2>
<div class="buttons"> <div class="buttons">
<b-button :loading="register.customization.loading" @click="doTheme('light')" size="is-large" expanded class="is-light">{{$t('guided.registration.customize.light')}}</b-button> <b-button :loading="register.customization.loading" @click="doTheme('light')" size="is-large" expanded class="is-light">{{$t('guided.registration.customize.light')}}</b-button>
@ -114,8 +113,8 @@
Error Error
</b-step-item> </b-step-item>
<br> <br>
<b-button v-if="$store.state.client.development" @click="bypassStage(true)">Debug: Bypass</b-button> <b-button v-if="$store.state.debug" @click="bypassStage(true)">Debug: Bypass</b-button>
<b-button v-if="$store.state.client.development" @click="bypassStage(false)">Debug: Back</b-button> <b-button v-if="$store.state.debug" @click="bypassStage(false)">Debug: Back</b-button>
</b-steps> </b-steps>
</div> </div>
</section> </section>
@ -155,13 +154,13 @@ export default {
methods: { methods: {
getInfo() { getInfo() {
Object.assign(axios.defaults, {headers: {Authorization: this.$store.state.user.token}}) Object.assign(axios.defaults, {headers: {Authorization: this.$store.state.user.token}})
this.axios.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'kaverti/state') this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'kaverti/state')
.then(res => { .then(res => {
this.$store.commit('setSettings', res.data.state) this.$store.commit('setSettings', res.data.state)
this.$store.commit('setVersion', res.data.state.latestCanaryVersion) this.$store.commit('setVersion', res.data.state.latestCanaryVersion)
this.$store.commit('setAPIVersion', res.data.apiVersion) this.$store.commit('setAPIVersion', res.data.apiVersion)
}) })
this.axios.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'userinfo') this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'userinfo')
.then(res => { .then(res => {
this.$store.commit('setUsername', res.data.username) this.$store.commit('setUsername', res.data.username)
this.$store.commit('setEmail', res.data.email) this.$store.commit('setEmail', res.data.email)
@ -186,8 +185,7 @@ export default {
}, },
doInit() { doInit() {
this.register.init.loading = true this.register.init.loading = true
this.axios.post(process.env.VUE_APP_API_ENDPOINT + this.axios.post('/api/v1/passkey/register', {
process.env.VUE_APP_API_VERSION + '/passkey/register', {
username: this.register.init.username, username: this.register.init.username,
password: this.register.init.password, password: this.register.init.password,
email: this.register.init.email, email: this.register.init.email,
@ -208,8 +206,7 @@ export default {
}, },
doInfo() { doInfo() {
this.register.personal.loading = true this.register.personal.loading = true
this.axios.put(process.env.VUE_APP_API_ENDPOINT + this.axios.put('/api/v1/users/preferences', {
process.env.VUE_APP_API_VERSION + '/users/preferences', {
description: this.register.personal.description description: this.register.personal.description
}).then(() => { }).then(() => {
this.getInfo() this.getInfo()
@ -223,8 +220,7 @@ export default {
}, },
doTheme(theme) { doTheme(theme) {
this.register.customization.loading = true this.register.customization.loading = true
this.axios.put(process.env.VUE_APP_API_ENDPOINT + this.axios.put('/api/v1/users/preferences', {
process.env.VUE_APP_API_VERSION + '/users/preferences', {
theme: theme theme: theme
}).then(() => { }).then(() => {
this.getInfo() this.getInfo()

View file

@ -1,60 +0,0 @@
<template>
<div id="settings">
<section class="section">
<div class="container" v-if="$store.state.user.username">
<div class="columns is-centered">
<div class="column is-3">
<b-menu>
<b-menu-list label="Settings">
<b-menu-item
:label="menuItem.name"
v-for="(menuItem, $index) in menuItems"
:key="'settings-link-' + $index"
tag="router-link"
:to="'/settings/' + menuItem.route"
></b-menu-item>
</b-menu-list>
</b-menu>
</div>
<div class="column is-9">
<router-view></router-view>
</div>
</div>
</div>
<div class="container" v-else>
<div class="columns is-centered">
<div class="column is-6">
<div class="box has-text-centered">
<i class="far fa-times-square large-icon"></i>
<div class="subtitle">{{ $t("generic.notLoggedIn") }}</div>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
export default {
name: "Settings",
data() {
return {
menuItems: [
{
name: this.$t('settings.menu.general'),
route: "general",
},
{
name: this.$t('settings.menu.security'),
route: "security",
},
{
name: this.$t('settings.menu.about'),
route: "about",
},
],
};
},
};
</script>

View file

@ -1,24 +0,0 @@
<template>
<div id="settings-about">
<div class="box">
<div class="title">{{ $t("settings.about.title") }}</div>
<hr />
<div class="has-text-centered">
<img src="https://cdn.kaverti.com/icon.png" alt="Logo" width="10%" />
<p>Kaverti v{{ this.$store.state.client.clientVersion }}</p>
<p>
Latest Client Version: v{{
this.$store.state.client.latestClientVersion
}}
</p>
<p>API Version: v{{ this.$store.state.client.latestAPIVersion }}</p>
</div>
</div>
</div>
</template>
<script>
export default {
name: "SettingsAbout",
};
</script>

View file

@ -1,135 +0,0 @@
<template>
<div id="settings-general">
<div class="box">
<div class="title">{{ $t("settings.general.title") }}</div>
<hr />
<div class="subtitle">{{ $t("settings.general.about") }}</div>
<form @submit.prevent="saveDesc">
<b-field :label="$t('settings.general.description')">
<b-input
type="textarea"
:placeholder="
$t('settings.general.hi') + ' ' + $store.state.user.username
"
maxlength="256"
v-model="settings.description.value"
:error="settings.description.error"
></b-input>
</b-field>
<b-button
type="is-info"
:loading="settings.description.loading"
@click="saveDescription"
>
{{ $t("settings.general.saveDesc") }}
</b-button>
</form>
<form @submit.prevent="savePref">
<b-field label="Developer Mode">
<b-switch
type="is-info"
true-value="true"
false-value="false"
v-model="settings.preferences.developerMode"
>{{ settings.preferences.developerMode }}</b-switch>
</b-field>
<b-button
type="is-info"
:loading="settings.preferences.loading"
@click="savepreferences"
>
{{ $t("settings.general.savePref") }}
</b-button>
</form>
</div>
</div>
</template>
<script>
export default {
name: "SettingsGeneral",
data() {
return {
settings: {
description: {
value: this.$store.state.user.description,
loading: false,
error: "",
},
preferences: {
developerMode: this.$store.state.user.developerMode,
loading: false,
error: "",
},
},
};
},
methods: {
clearErrors() {
this.settings.description.error = "";
this.settings.preferences.error = "";
},
changesSaved() {
this.$buefy.snackbar.open({
duration: 5000,
message: "Changes saved.",
type: "is-success",
position: "is-bottom-left",
actionText: "Ok",
queue: false,
});
},
saveDescription() {
this.clearErrors();
this.settings.description.loading = true;
this.axios
.put(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/users/preferences",
{
description: this.settings.description.value,
}
)
.then(() => {
this.settings.description.loading = false;
this.changesSaved();
})
.catch((err) => {
this.settings.description.loading = false;
AjaxErrorHandler(this.$store)(err);
});
},
savepreferences() {
this.clearErrors();
this.settings.preferences.loading = true;
this.axios
.put(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/users/preferences",
{
developerMode: this.settings.preferences.developerMode,
}
)
.then(() => {
this.axios
.get(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/userinfo"
)
.then((res) => {
this.$store.commit("setDevMode", res.data.developerMode);
});
this.settings.description.loading = false;
this.changesSaved();
})
.catch((err) => {
this.settings.preferences.loading = false;
AjaxErrorHandler(this.$store)(err);
});
},
},
};
</script>

View file

@ -1,158 +0,0 @@
<template>
<div id="settings-account">
<div class="box">
<div class="title">{{ $t("settings.security.title") }}</div>
<hr>
<div class="subtitle">{{$t('settings.security.password.title')}}</div>
<b-field :label="$t('settings.security.password.oldPassword')">
<b-input type="password" v-model="password.oldPassword" :placeholder="$t('settings.security.password.oldPassword')"></b-input>
</b-field>
<b-field :label="$t('settings.security.password.newPassword')">
<b-input type="password" minlength="6" maxlength="50" v-model="password.newPassword" :placeholder="$t('settings.security.password.newPassword')"></b-input>
</b-field>
<b-field :label="$t('settings.security.password.newPasswordConfirm')">
<b-input type="password" minlength="6" maxlength="50" v-model="password.newPasswordConfirm" :placeholder="$t('settings.security.password.newPasswordConfirm')"></b-input>
</b-field>
<b-button :loading="password.loading" class="is-danger" @click="changePassword">{{$t('settings.security.password.change')}}</b-button>
<hr>
<div class="subtitle">{{$t('settings.security.email.title')}}</div>
<p>{{$t('settings.security.email.current')}} {{$store.state.user.email}}</p>
<p>{{$t('settings.security.email.verified')}} <span v-if="!$store.state.user.emailVerified">{{$t('settings.security.email.verifiedFalse')}}<br><b-button :loading="resend.loading" @click="resendEmail()">{{$t('settings.security.resend.resend')}}</b-button></span> <span v-if="$store.state.user.emailVerified">{{$t('settings.security.email.verifiedTrue')}}</span></p>
<b-field :label="$t('settings.security.email.newEmail')">
<b-input type="email" v-model="email.newEmail" :placeholder="$t('settings.security.email.newEmail')"></b-input>
</b-field>
<b-field :label="$t('settings.security.password.oldPassword')">
<b-input type="password" minlength="6" maxlength="50" v-model="email.password" :placeholder="$t('settings.security.password.oldPassword')"></b-input>
</b-field>
<b-button :loading="email.loading" class="is-info" @click="changeEmail">{{$t('settings.security.email.change')}}</b-button>
<hr>
<div class="subtitle">{{$t('settings.security.session.title')}}</div>
<p>{{$t('settings.security.session.subtitle')}}</p>
<br>
<b-button :loading="session.loading" class="is-danger" @click="invalidateSessions()">{{$t('settings.security.session.invalidate')}}</b-button>
</div>
</div>
</template>
<script>
import AjaxErrorHandler from "@/assets/js/errorHandler";
import axios from "axios";
export default {
name: "SettingsAccount",
data() {
return {
password: {
oldPassword: '',
newPassword: '',
newPasswordConfirm: '',
loading: false
},
twoFactor: {
secret: '',
confirmCode: '',
enabled: false,
loading: false
},
email: {
newEmail: '',
password: '',
loading: false
},
resend: {
loading: false
},
session: {
loading: false
}
}
},
methods: {
changePassword() {
this.password.loading = true
this.axios.put(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/users/preferences", {
oldPassword: this.password.oldPassword,
newPassword: this.password.newPassword,
newPasswordConfirm: this.password.newPasswordConfirm
})
.then(() => {
this.password.loading = false
this.logout()
})
.catch((e) => {
this.password.loading = false
AjaxErrorHandler(this.$store)(e);
})
},
logout() {
this.$store.commit('issueLogout');
Object.assign(axios.defaults, {
headers: { Authorization: this.$store.state.user.token },
});
localStorage.removeItem("token");
this.$buefy.snackbar.open({
message: this.$t("errors.logout"),
type: "is-info",
});
},
changeEmail() {
this.email.loading = true
this.axios.put(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/users/preferences", {
password: this.email.password,
newEmail: this.email.newEmail
})
.then((res) => {
this.$store.commit('setEmail', res.data.email)
this.$store.commit('setEmailVerified', false)
this.axios.post(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/recovery/send`)
.then(() => {
this.$buefy.snackbar.open({
message: this.$t("errors.verifySent"),
type: "is-info",
});
this.email.loading = false
})
})
.catch((e) => {
this.email.loading = false
AjaxErrorHandler(this.$store)(e);
})
},
resendEmail() {
this.resend.loading = true
this.axios.post(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/verify/send`)
.then(() => {
this.$buefy.snackbar.open({
message: this.$t("errors.verifySent"),
type: "is-info",
});
this.resend.loading = false
})
.catch((e) => {
this.resend.loading = false
AjaxErrorHandler(this.$store)(e);
})
},
invalidateSessions() {
this.session.loading = true
this.axios.put(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `users/preferences`, {
invalidateSession: true
})
.then(() => {
this.session.loading = false
this.logout()
})
.catch((e) => {
this.session.loading = false
AjaxErrorHandler(this.$store)(e);
})
}
}
}
</script>

View file

@ -75,7 +75,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.axios.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'kaverti/stats') this.axios.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'kaverti/stats')
.then(res => { .then(res => {
this.users = res.data.users this.users = res.data.users
this.posts = res.data.posts this.posts = res.data.posts

View file

@ -3,10 +3,9 @@
<section class="section"> <section class="section">
<div class="container"> <div class="container">
<div class="columns is-centered is-multiline" v-if="!loading"> <div class="columns is-centered is-multiline" v-if="!loading">
<div class="column is-6" v-if="!teams.length"> <div v-if="!teams.length" class="column">
<div class="box"> <br />
<NoItems :connection="true" type="teams"> </NoItems> <NoItems :connection="true" type="users"> </NoItems>
</div>
</div> </div>
<Pagination <Pagination
class="columns is-multiline" class="columns is-multiline"
@ -23,11 +22,23 @@
> >
<div class="box"> <div class="box">
<h1 class="title"> <h1 class="title">
<router-link :to="'/t/' + user.username" style="text-decoration: none; color: inherit;">{{ user.username }}</router-link>&nbsp;<Badges {{ user.username }}&nbsp;<Badges
:verified="user.verified" :team="true" :verified="user.verified"
></Badges> ></Badges>
</h1> </h1>
PLACEHOLDER IMAGE<br /> <img
:src="
'https://cdn.kaverti.com/user/avatars/full/' +
user.picture +
'.png'
"
/><br />
<b-button
tag="router-link"
:to="'/u/' + user.username"
class="is-centered is-info"
>View Team</b-button
>
</div> </div>
</div> </div>
</Pagination> </Pagination>
@ -145,7 +156,7 @@ export default {
this.wait = true this.wait = true
} }
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + '/' + 'teams/' + '?offset=' + this.offset) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'teams/' + '?offset=' + this.offset)
.then(res => { .then(res => {
if(res.data < this.limit) { if(res.data < this.limit) {
this.offset = null; this.offset = null;

View file

@ -1,16 +1,10 @@
<template> <template>
<div id="transactions"> <main>
<section class="section"> <div class="section column">
<div class="container" v-if="$store.state.user.username">
<div class="columns is-centered">
<div class="column is-6">
<div class="box"> <div class="box">
<div class="title">Transaction Log</div> <h1 class="title">Transaction Log</h1>
<hr />
<NoItems v-if="!transactions.length" type="transactions"></NoItems>
<b-table <b-table
v-else :detail-key='"log-" + transactions.id'
:detail-key="'log-' + transactions.id"
:data="transactions" :data="transactions"
:paginated="isPaginated" :paginated="isPaginated"
:per-page="perPage" :per-page="perPage"
@ -26,73 +20,47 @@
aria-next-label="Next page" aria-next-label="Next page"
aria-previous-label="Previous page" aria-previous-label="Previous page"
aria-page-label="Page" aria-page-label="Page"
> aria-current-label="Current page">
<b-table-column
field="props.row.text" <b-table-column field="props.row.text" label="Message" sortable v-slot="props">
label="Message"
sortable
v-slot="props"
>
{{ props.row.text }} {{ props.row.text }}
</b-table-column> </b-table-column>
<b-table-column
field="props.row.priceOfPurchase" <b-table-column field="props.row.priceOfPurchase" label="Price" sortable v-slot="props">
label="Price"
sortable
v-slot="props"
>
{{ props.row.priceOfPurchase }} {{ props.row.priceOfPurchase }}
</b-table-column> </b-table-column>
<b-table-column <b-table-column field="props.row.createdAt" label="Date" sortable centered v-slot="props">
field="props.row.createdAt"
label="Date"
sortable
centered
v-slot="props"
>
<span class="tag is-success"> <span class="tag is-success">
{{ new Date(props.row.createdAt).toLocaleDateString() }} {{ new Date(props.row.createdAt).toLocaleDateString() }}
</span> </span>
</b-table-column> </b-table-column>
</b-table> </b-table>
</div> </div>
<NoItems v-if="!transactions.length" type="transactions"></NoItems>
</div> </div>
</div> </main>
</div>
<div class="container" v-else>
<div class="columns is-centered">
<div class="column is-6">
<div class="box has-text-centered">
<i class="far fa-times-square large-icon"></i>
<div class="subtitle">{{ $t("generic.notLoggedIn") }}</div>
</div>
</div>
</div>
</div>
</section>
</div>
</template> </template>
<script> <script>
import AjaxErrorHandler from ".././assets/js/errorHandler"; import AjaxErrorHandler from '.././assets/js/errorHandler';
import NoItems from "../components/NoItems"; import NoItems from '../components/NoItems'
export default { export default {
name: "Transactions", name: 'Transactions',
components: { components: {
NoItems, NoItems
}, },
data () { data () {
return { return {
search: "", search: '',
transactions: [], transactions: [],
isPaginated: true, isPaginated: true,
isPaginationSimple: false, isPaginationSimple: false,
isPaginationRounded: false, isPaginationRounded: false,
paginationPosition: "bottom", paginationPosition: 'bottom',
defaultSortDirection: "desc", defaultSortDirection: 'desc',
sortIcon: "arrow-up", sortIcon: 'arrow-up',
sortIconSize: "is-small", sortIconSize: 'is-small',
currentPage: 1, currentPage: 1,
perPage: 30, perPage: 30,
defaultOpenedDetails: [1], defaultOpenedDetails: [1],
@ -103,53 +71,49 @@ export default {
limit: 15, limit: 15,
showTeamTab: 0, showTeamTab: 0,
tcreateProd: { tcreateProd: {
username: "", username: '',
name: "", name: '',
loading: false, loading: false,
errors: { errors: {
username: "", username: '',
name: "", name: ''
}, }
}, },
roleOptions: [ roleOptions: [
{ name: "Admins", value: "admin" }, { name: 'Admins', value: 'admin' },
{ name: "transactions", value: "user" }, { name: 'transactions', value: 'user' }
], ],
roleSelected: ["admin", "user"], roleSelected: ['admin', 'user'],
tableSort: { tableSort: {
column: "username", column: 'username',
sort: "desc", sort: 'desc'
}, }
}; }
}, },
methods: { methods: {
fetchData () { fetchData () {
if(this.offset === null) return; if(this.offset === null) return;
let url = let url = process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `transactions?
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
`/` +
`transactions?
sort=${this.tableSort.column} sort=${this.tableSort.column}
&order=${this.tableSort.sort} &order=${this.tableSort.sort}
&offset=${this.offset} &offset=${this.offset}
`; `;
if(this.roleSelected.length === 1) { if(this.roleSelected.length === 1) {
url += "&role=" + this.roleSelected[0]; url += '&role=' + this.roleSelected[0];
} }
if(this.search.length) { if(this.search.length) {
url += "&search=" + encodeURIComponent(this.search.trim()); url += '&search=' + encodeURIComponent(this.search.trim());
} }
this.loading = true; this.loading = true;
this.axios this.axios
.get(url) .get(url)
.then((res) => { .then(res => {
this.transactions.push(...res.data); this.transactions.push(...res.data);
this.loading = /*loading =*/ false; this.loading = /*loading =*/ false;
@ -161,7 +125,7 @@ export default {
this.offset+= this.limit; this.offset+= this.limit;
} }
}) })
.catch((e) => { .catch(e => {
AjaxErrorHandler(this.$store)(e); AjaxErrorHandler(this.$store)(e);
this.loading = /*loading =*/ false; this.loading = /*loading =*/ false;
}); });
@ -170,36 +134,27 @@ export default {
this.offset = 0; this.offset = 0;
this.transactions = []; this.transactions = [];
this.fetchData();
},
},
getNewertransactions() {
this.loadingNewer = true;
this.axios
.get(
process.env.VUE_APP_API_ENDPOINT +
process.env.VUE_APP_API_VERSION +
"/" +
"transactions" +
"?limit=" +
this.newtransactions
)
.then((res) => {
this.loadingNewer = false;
this.newtransactions = 0;
this.threads.unshift(...res.data.Threads);
})
.catch((e) => {
this.loadingNewer = false;
AjaxErrorHandler(this.$store)(e);
});
},
mounted() {
if (this.$store.state.user.username) {
this.fetchData(); this.fetchData();
} }
}, },
}; getNewertransactions () {
this.loadingNewer = true
this.axios
.get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + '/' + 'transactions' + '?limit=' + this.newtransactions)
.then(res => {
this.loadingNewer = false
this.newtransactions = 0
this.threads.unshift(...res.data.Threads)
})
.catch((e) => {
this.loadingNewer = false
AjaxErrorHandler(this.$store)(e)
})
},
mounted () {
this.fetchData();
}
}
</script> </script>

View file

@ -3,7 +3,7 @@
<section class="section"> <section class="section">
<div class="container"> <div class="container">
<div class="columns is-centered" v-if="exists"> <div class="columns is-centered" v-if="exists">
<div class="column is-4 is-vcentered has-text-centered"> <div class="column is-3 is-vcentered has-text-centered">
<h1 class="title"> <h1 class="title">
{{ user.username }}&nbsp;<Badges {{ user.username }}&nbsp;<Badges
:username="user.username" :username="user.username"
@ -95,7 +95,7 @@
{{ $t("user.marketplace") }}: {{ $t("user.marketplace") }}:
</div> </div>
</div> </div>
<div class="column is-8 is-vcentered has-text-centered"> <div class="column is-6 is-vcentered has-text-centered">
<h1 class="title">{{ $t("user.more") }} {{ user.username }}</h1> <h1 class="title">{{ $t("user.more") }} {{ user.username }}</h1>
<div> <div>
<div class="tabs"> <div class="tabs">
@ -224,8 +224,8 @@ export default {
fetchData() { fetchData() {
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`user/${this.$route.params.username}` `user/${this.$route.params.username}`
) )
@ -243,8 +243,8 @@ export default {
}); });
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
"relationships/get/" + "relationships/get/" +
this.$route.params.username this.$route.params.username
@ -254,8 +254,8 @@ export default {
scrubDesc() { scrubDesc() {
this.axios this.axios
.put( .put(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"admin/user/scrub", "admin/user/scrub",
{ {
@ -271,8 +271,8 @@ export default {
refreshAvatar() { refreshAvatar() {
this.axios this.axios
.put( .put(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"admin/user/avatar", "admin/user/avatar",
{ {
@ -287,8 +287,8 @@ export default {
scrubUsername() { scrubUsername() {
this.axios this.axios
.put( .put(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"admin/user/scrub", "admin/user/scrub",
{ {
@ -305,8 +305,8 @@ export default {
this.relationships.type === ""; this.relationships.type === "";
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -315,8 +315,8 @@ export default {
removeFriend() { removeFriend() {
this.axios this.axios
.put( .put(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"relationships/remove", "relationships/remove",
{ {
@ -328,8 +328,8 @@ export default {
this.description.loading = false; this.description.loading = false;
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -356,8 +356,8 @@ export default {
}); });
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -379,8 +379,8 @@ export default {
doRelationship() { doRelationship() {
this.axios this.axios
.post( .post(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"relationships/send", "relationships/send",
{ {
@ -392,8 +392,8 @@ export default {
this.description.loading = false; this.description.loading = false;
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -417,8 +417,8 @@ export default {
AjaxErrorHandler(this.$store)(e); AjaxErrorHandler(this.$store)(e);
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -439,8 +439,8 @@ export default {
doRelationshipAccept() { doRelationshipAccept() {
this.axios this.axios
.put( .put(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"relationships/accept", "relationships/accept",
{ {
@ -452,8 +452,8 @@ export default {
this.description.loading = false; this.description.loading = false;
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -479,8 +479,8 @@ export default {
}); });
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )
@ -517,8 +517,8 @@ export default {
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`user/${this.$route.params.username}` `user/${this.$route.params.username}`
) )
@ -526,8 +526,8 @@ export default {
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
`/` + `/` +
`relationships/get/${this.$route.params.username}` `relationships/get/${this.$route.params.username}`
) )

View file

@ -34,7 +34,7 @@ export default {
}, },
mounted() { mounted() {
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `user/${this.$route.params.username}?awards=true`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `user/${this.$route.params.username}?awards=true`)
.then(res => { .then(res => {
this.awards = res.data this.awards = res.data
}) })

View file

@ -27,7 +27,7 @@ export default {
}, },
mounted() { mounted() {
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + 'relationships/user/' + this.$route.params.username) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + 'relationships/user/' + this.$route.params.username)
.then(res => { .then(res => {
this.friends = res.data this.friends = res.data
}) })

View file

@ -33,7 +33,7 @@ export default {
}, },
mounted() { mounted() {
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `user/${this.$route.params.username}?sort=username&order=desc&offset=234243&inventory=true`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `user/${this.$route.params.username}?sort=username&order=desc&offset=234243&inventory=true`)
.then(res => { .then(res => {
this.inventory = res.data.Inventories this.inventory = res.data.Inventories
}) })

View file

@ -80,7 +80,7 @@ export default {
this.$store.dispatch('setTitle', this.$route.params.username + ' - Posts') this.$store.dispatch('setTitle', this.$route.params.username + ' - Posts')
this.axios this.axios
.get(process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_API_VERSION + `/` + `user/${this.$route.params.username}?posts=true`) .get(process.env.VUE_APP_APIENDPOINT + process.env.VUE_APP_APIVERSION + `/` + `user/${this.$route.params.username}?posts=true`)
.then(res => { .then(res => {
this.posts = res.data.Posts this.posts = res.data.Posts
this.nextURL = res.data.meta.nextURL this.nextURL = res.data.meta.nextURL

View file

@ -3,11 +3,10 @@
<section class="section"> <section class="section">
<div class="container"> <div class="container">
<div class="columns is-centered is-multiline" v-if="!loading"> <div class="columns is-centered is-multiline" v-if="!loading">
<div class="column is-6" v-if="!users.length"> <div v-if="!users.length" class="column">
<div class="box"> <br />
<NoItems :connection="true" type="users"> </NoItems> <NoItems :connection="true" type="users"> </NoItems>
</div> </div>
</div>
<Pagination <Pagination
class="columns is-multiline" class="columns is-multiline"
v-if="users.length" v-if="users.length"
@ -30,7 +29,6 @@
:admin="user.admin" :admin="user.admin"
:booster="user.booster" :booster="user.booster"
:bot="user.bot" :bot="user.bot"
:user="true"
></Badges> ></Badges>
</h1> </h1>
<img <img
@ -165,8 +163,8 @@ export default {
} }
this.axios this.axios
.get( .get(
process.env.VUE_APP_API_ENDPOINT + process.env.VUE_APP_APIENDPOINT +
process.env.VUE_APP_API_VERSION + process.env.VUE_APP_APIVERSION +
"/" + "/" +
"user/" + "user/" +
"?offset=" + "?offset=" +

View file

@ -1,66 +0,0 @@
const Dotenv = require('dotenv-webpack');
var WebpackAutoInject = require('webpack-auto-inject-version');
const fs = require("fs");
module.exports = {
devServer: {
proxy: 'http://localhost:23981',
//disableHostCheck: true, // dev.kaverti.flowinity
//host: 'dev.kaverti.flowinity',
/*
https: {
cert: fs.readFileSync('C:/ssl/troplo/certificate.crt'),
key: fs.readFileSync('C:/ssl/troplo/private.key'),
}
*/
},
publicPath: '/',
productionSourceMap: false,
configureWebpack: {
plugins: [
new Dotenv(),
new WebpackAutoInject({
// specify the name of the tag in the outputed files eg
// bundle.js: [SHORT] Version: 0.13.36 ...
SHORT: 'Kaverti AIV',
SILENT: false,
PACKAGE_JSON_PATH: './package.json',
PACKAGE_JSON_INDENT: 4,
components: {
AutoIncreaseVersion: true,
InjectAsComment: true,
InjectByTag: true
},
componentsOptions: {
AutoIncreaseVersion: {
runInWatchMode: true // it will increase version with every single build!
},
InjectAsComment: {
tag: 'Kaverti Version: {version}, Build Date: {date}',
dateFormat: 'dd/mm/yyyy; hh:MM:ss TT', // change timezone: `UTC:h:MM:ss` or `GMT:h:MM:ss`
multiLineCommentType: false, // use `/** */` instead of `//` as comment block
},
InjectByTag: {
fileRegex: /\.+/,
AIVTagRegexp: /(\[AIV])(([a-zA-Z{} ,:;!()_@\-"'\\\/])+)(\[\/AIV])/g,
dateFormat: 'dd/mm/yyyy; hh:MM:ss TT'
}
},
LOGS_TEXT: {
AIS_START: 'Kaverti AIV started'
}
})
]
},
pluginOptions: {
i18n: {
locale: 'en',
fallbackLocale: 'debug',
localeDir: 'locales',
enableInSFC: false
}
}
}

24
vue.config.js Normal file
View file

@ -0,0 +1,24 @@
const Dotenv = require('dotenv-webpack');
module.exports = {
devServer: {
proxy: 'http://localhost:23982'
},
publicPath: '/',
productionSourceMap: false,
configureWebpack: {
plugins: [
new Dotenv()
]
},
pluginOptions: {
i18n: {
locale: 'en',
fallbackLocale: 'debug',
localeDir: 'locales',
enableInSFC: false
}
}
}

View file

@ -11729,11 +11729,6 @@ wcwidth@^1.0.1:
dependencies: dependencies:
defaults "^1.0.3" defaults "^1.0.3"
webpack-auto-inject-version@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/webpack-auto-inject-version/-/webpack-auto-inject-version-1.2.2.tgz#8fa15f6ea7c4a2a4adcdc5d8b1dc47693dddc971"
integrity sha512-duFSWzZe/OY8zyr2DpymzZeY8yI1RSZ9hu9wDwZy/fhxwntgpEzTwyIB/U7ig+FB26mif8xx5zS1E3Co9c5cYA==
webpack-bundle-analyzer@^3.8.0: webpack-bundle-analyzer@^3.8.0:
version "3.9.0" version "3.9.0"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c"