some changes

This commit is contained in:
supertiger1234 2019-04-20 10:54:34 +01:00
parent 9e4897d36b
commit e6e8afaa52
21 changed files with 874 additions and 56 deletions

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
.DS_Store
node_modules
/dist
/src/config.js
# local env files
.env.local

View file

@ -1,10 +1,8 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
}
}
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}

13
package-lock.json generated
View file

@ -10815,6 +10815,11 @@
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.2.tgz",
"integrity": "sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg=="
},
"vue-script2": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-script2/-/vue-script2-2.0.3.tgz",
"integrity": "sha512-sGsFbqCIZDbPq140X1p8T6Y72MoCtkFpQ7CfhknZLqDZxMGWavFqIY/5YsnhqxxatWnYy0us/IoHSDr5l2JZzQ=="
},
"vue-socket.io": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/vue-socket.io/-/vue-socket.io-3.0.4.tgz",
@ -10865,6 +10870,14 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
"vue-twitter": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/vue-twitter/-/vue-twitter-0.1.0.tgz",
"integrity": "sha512-qBHVaOjIX25rleBwHfNPsFpN6frxoz+cZNxXOyVRD20AdldpHhaXc3oKo7XNl6DBa5AkJl1jnU+rn3rKjfBm+A==",
"requires": {
"vue-script2": "^2.0.3"
}
},
"vuex": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz",

View file

@ -24,6 +24,7 @@
"vue-router": "^3.0.2",
"vue-socket.io": "^3.0.4",
"vue-socket.io-extended": "^3.2.0",
"vue-twitter": "^0.1.0",
"vuex": "^3.0.1"
},
"devDependencies": {

View file

@ -1,6 +1,8 @@
<template>
<div :class="{message: true, ownMessage: user.uniqueID === $props.uniqueID}">
<profile-picture :hover="true" :admin="$props.admin" :url="userAvatar" size="50px" @click.native="openUserInformation"/>
<div :class="{message: true, ownMessage: user.uniqueID === $props.uniqueID, ownMessageLeft: user.uniqueID === $props.uniqueID && (apperance && apperance.own_message_right === true)} ">
<div class="outer-profile-picture">
<profile-picture :hover="true" :admin="$props.admin" :url="userAvatar" size="50px" @click.native="openUserInformation"/>
</div>
<div class="triangle">
<div class="triangle-inner"></div>
</div>
@ -39,6 +41,8 @@ import config from "@/config.js";
import friendlyDate from "@/utils/date";
import path from "path";
import { mapState } from "vuex";
export default {
components: {
ProfilePicture
@ -62,6 +66,7 @@ export default {
}
},
computed: {
...mapState('settingsModule', ['apperance']),
getImage() {
if (!this.$props.files || this.$props.files.length === 0)
return undefined;
@ -114,6 +119,30 @@ export default {
<style scoped>
.ownMessageLeft {
flex-direction: row-reverse;
}
.ownMessageLeft .triangle-inner {
transition: 0.5s;
border-left: 7px solid rgba(184, 184, 184, 0.219);
border-right: none !important;
}
.ownMessageLeft .profile-picture {
margin-right: 0px;
margin-left: 5px;
}
.ownMessageLeft .sending-status{
margin-left: auto !important;
margin-right: 4px !important;
}
.outer-profile-picture{
z-index:9999;
}
.message {
margin: 10px;
margin-top: 10px;

View file

@ -13,6 +13,11 @@
</transition>
</div>
</div>
<div class="setting-icon survay-button" @click="openSettings">
<div class="survay-inner">
<i class="material-icons">error</i>
</div>
</div>
<div class="setting-icon" @click="openSettings">
<i class="material-icons">settings</i>
</div>
@ -80,7 +85,25 @@ export default {
<style scoped>
.survay-button {
padding: 10px;
height: 24px;
width: 24px;
}
.survay-inner {
display: inline-block;
box-shadow: 0px 0px 20px 3px cyan;
border-radius: 50%;
}
.survay-button .material-icons {
display: block;
margin-left: -3px !important;
margin-top: -3px !important;
height: 24px;
width: 24px;
font-size: 30px;
color: cyan;
}
.show-status-list-enter-active, .show-status-list-leave-active {
transition: .1s;

View file

@ -32,10 +32,12 @@
import { bus } from "../../main";
import MyProfile from "./SettingsPanels/MyProfile.vue";
import ManageEmojis from "./SettingsPanels/ManageEmojis.vue";
import MessageDesign from "./SettingsPanels/MessageDesign.vue";
export default {
components: {
MyProfile,
ManageEmojis
ManageEmojis,
MessageDesign
},
data() {
return {
@ -48,10 +50,10 @@ export default {
component: "my-profile"
},
{
name: "Message Themes",
tabName: "Coming soon!",
name: "Message Design",
tabName: "Message Design",
icon: "palette",
component: "ddddsd"
component: "message-design"
},
{
name: "Manage Emojis",
@ -87,26 +89,31 @@ export default {
color: white;
}
.settings-box {
height: 600px;
display: flex;
margin: auto;
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.507);
}
.tabs {
background: rgba(24, 24, 24, 0.938);
height: 600px;
height: 100%;
width: 200px;
min-width: 150px;
overflow-y: auto;
overflow-x: hidden;
}
.panel {
display: flex;
flex-direction: column;
background: rgba(31, 31, 31, 0.924);
height: 600px;
height: 100%;
width: 600px;
}
.tab {
display: flex;
padding: 10px;
background: rgba(26, 26, 26, 0.233);
border-radius: 5px;
margin-top: 5px;
margin-bottom: 5px;
cursor: default;
@ -162,5 +169,10 @@ export default {
width: 100%;
}
}
@media (max-height: 609px) {
.settings-box {
height: 100%;
}
}
</style>

View file

@ -0,0 +1,139 @@
<template>
<div class="drop-down">
<div class="main-name">{{name}}</div>
<div class="box" @click="opened = !opened">
<div class="selected" >
<div class="emoji" v-if="selected !== null && updateItems[selected]" v-html="updateItems[selected].emoji || ''"></div>
{{selected === null ? 'Select One' : updateItems[selected].name}}
</div>
<i class="material-icons">expand_more</i>
</div>
<div class="drop-down-menu" v-if="opened">
<div
class="item"
v-for="(item, index) in updateItems"
:key="index"
@click="itemClickEvent(index)"
>
<div class="content">
<div class="emoji" v-html="item.emoji"></div>
<div class="name">{{item.name}}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import emojiParser from "@/utils/emojiParser.js";
import { constants } from 'crypto';
export default {
model: {
prop: "itemSelected",
event: "change"
},
props: ["items", "name", "itemSelected", "default"], // items: [{emoji, name}...]
data() {
return {
opened: false,
selected: this.default || null
};
},
methods: {
itemClickEvent(index) {
this.selected = index;
this.$emit("change", index);
this.opened = false;
}
},
computed: {
updateItems() {
this.$emit("change", null);
this.selected = null;
let newArr = [];
for (let index = 0; index < this.items.length; index++) {
let element = this.items[index];
if (element.emoji) {
if (element.emoji.startsWith("<img")) return this.items
element.emoji = emojiParser.replaceEmojis(element.emoji);
newArr.push(element);
} else {
element.emoji = ""
newArr.push(element);
}
}
return newArr;
}
}
};
</script>
<style scoped>
.material-icons {
margin-right: 10px;
}
.main-name {
margin-top: 10px;
margin-bottom: 5px;
}
.drop-down {
width: 220px;
user-select: none;
cursor: default;
position: relative;
}
.box {
width: 100%;
height: 44px;
background: rgba(61, 61, 61, 0.863);
display: flex;
flex-direction: row;
align-content: center;
align-items: center;
}
.selected {
flex: 1;
display: flex;
align-content: center;
align-items: center;
margin-left: 10px;
}
.drop-down-menu {
display: flex;
flex-direction: column;
width: 100%;
background: rgba(24, 24, 24, 0.945);
max-height: 200px;
width: 220px;
overflow: auto;
}
.item {
width: 100%;
margin-top: 2px;
margin-bottom: 2px;
transition: 0.3s;
}
.item:hover {
background: rgba(15, 15, 15, 0.726);
}
.content {
display: flex;
align-content: center;
align-items: center;
margin: 3px;
}
.emoji {
margin-right: 5px;
}
</style>
<style>
.drop-down-menu img {
height: 20px !important;
width: 20px !important;
}
</style>

View file

@ -210,6 +210,7 @@ input:focus {
flex-direction: column;
width: 100%;
height: 100%;
margin-bottom: 20px;
}
.emojis-list {
@ -218,7 +219,7 @@ input:focus {
background: rgba(47, 47, 47, 0.767);
overflow-y: auto;
overflow-x: hidden;
height: calc(100% - 120px);
height: 100%;
width: calc(100% - 30px);
margin: auto;
margin-top: 5px;

View file

@ -0,0 +1,116 @@
<template>
<div class="my-profile-panel">
<div class="title">Message Example</div>
<div class="message-example">
<message-template message="Hi" :username="user.username" :date="Date.now()" :uniqueID="user.uniqueID" :admin="user.admin" :avatar="user.avatar" />
<message-template message="Hello." username="Cool Dude" :date="Date.now()"/>
<message-template message="Whaddup" :username="user.username" :date="Date.now()" :uniqueID="user.uniqueID" :admin="user.admin" :avatar="user.avatar" />
<message-template message="Nothing, bye." username="Cool Dude" :date="Date.now()"/>
</div>
<div class="title">Options</div>
<div class="switches">
<div class="checkbox" @click="toggleAppearance">
<div :class="`checkbox-box ${apperance && apperance.own_message_right && apperance.own_message_right === true ? 'selected' : '' }`"></div>
<div class="checkbox-name">Show my messages on the right side.</div>
</div>
</div>
<div class="title">Message Themes (Soon!)</div>
</div>
</template>
<script>
import config from "@/config.js";
import MessageTemplate from '@/components/app/MessageTemplate.vue';
import SettingsService from '@/services/settingsService.js';
import { mapState } from "vuex";
export default {
components: {
MessageTemplate
},
data() {
return {
};
},
methods: {
toggleAppearance() {
if (!this.apperance || !this.apperance.own_message_right || this.apperance.own_message_right === false) {
this.$store.dispatch('settingsModule/setApperance', {"own_message_right": true})
return SettingsService.setApperance("own_message_right", true)
}
this.$store.dispatch('settingsModule/setApperance', {"own_message_right": false})
SettingsService.setApperance("own_message_right", false)
}
},
computed: {
...mapState('settingsModule', ['apperance']),
user() {
return this.$store.getters.user
}
}
};
</script>
<style scoped>
.switches {
display: flex;
margin: 20px;
user-select: none;
}
.checkbox {
display: flex;
}
.checkbox-box {
background: rgba(88, 88, 88, 0.74);
height: 20px;
width: 20px;
margin: auto;
margin-right: 10px;
transition: 0.3s;
border-radius: 5px;
}
.checkbox-box.selected {
background: rgba(66, 122, 244, 0.74);
}
.checkbox-box.selected:hover {
background: rgba(66, 122, 244, 0.94);
}
.checkbox-box:hover {
background: rgba(88, 88, 88, 0.94);
}
.checkbox-name {
max-width: 200px;
}
.message-example{
padding: 10px;
background: rgba(88, 88, 88, 0.44);
border-radius: 10px;
margin: 10px;
}
.title{
font-size: 20px;
text-align: center;
margin-bottom: 5px;
}
.hidden {
display: none;
}
.my-profile-panel {
display: flex;
width: 100%;
height: 100%;
margin-top: 10px;
flex-direction: column;
}
</style>

View file

@ -1,23 +1,88 @@
<template>
<div class="my-profile-panel">
<div class="profile-picture-outer">
<profile-picture :url="avatar" :admin="user.admin" size="100px" emoteSize="30px" animationPadding="5px"/>
</div>
<div class="information">
<div class="username">
<strong>Username:</strong>
{{user.username}}
<div class="general-information">
<div class="profile-picture-outer">
<profile-picture
:url="avatar"
:admin="user.admin"
size="100px"
emoteSize="30px"
animationPadding="5px"
/>
</div>
<div class="tag">
<strong>Tag:</strong>
@{{user.tag}}
<div class="information">
<div class="username">
<strong>Username:</strong>
{{user.username}}
</div>
<div class="tag">
<strong>Tag:</strong>
@{{user.tag}}
</div>
</div>
<div class="options">
<input
type="file"
accept="image/*"
ref="avatarBrowser"
@change="avatarBrowse"
class="hidden"
>
<div class="option" @click="editAvatarBtn">Edit Avatar</div>
<div class="option" @click="changePassword">Change Password</div>
<div class="option red" @click="logout">Logout</div>
</div>
</div>
<div class="options">
<input type="file" accept="image/*" ref="avatarBrowser" @change="avatarBrowse" class="hidden">
<div class="option" @click="editAvatarBtn">Edit Avatar</div>
<div class="option" @click="changePassword">Change Password</div>
<div class="option red" @click="logout">Logout</div>
<div class="title">
<i class="material-icons">error</i>
Take Survey
</div>
<div class="notice">Note: Everyone will be able to see your survey in your profile.</div>
<div class="survey">
<!-- name -->
<div>
<div class="survey-title">What's your name?</div>
<input
class="survey-input"
v-model="surveySelectedItems.name"
type="text"
placeholder="Name"
>
</div>
<!-- Gender -->
<div class="survey-box">
<drop-down
name="What is your gender?"
v-model="surveySelectedItems.gender"
:items="surveyItems.gender"
/>
</div>
<!-- Age -->
<div class="survey-box">
<drop-down
name="What is your age?"
v-model="surveySelectedItems.age"
:items="surveyItems.age"
/>
</div>
<!-- Continent -->
<div class="survey-box">
<drop-down
name="Pick a continent"
v-model="surveySelectedItems.continent"
:items="surveyItems.continents"
/>
</div>
<!-- Countries -->
<div class="survey-box">
<drop-down
name="Pick a country"
v-if="surveySelectedItems.continent != null"
v-model="surveySelectedItems.countries"
:items="filterCountry"
/>
</div>
</div>
<div class="alert-outer" v-if="alert.show">
<div class="alert">
@ -32,7 +97,9 @@
</template>
<script>
import surveyItems from "@/utils/surveyItems.js";
import ProfilePicture from "@/components/ProfilePictureTemplate.vue";
import DropDown from "@/components/app/SettingsPanels/DropDownTemplate.vue";
import AvatarUpload from "@/services/AvatarUpload.js";
import config from "@/config.js";
import { bus } from "@/main";
@ -41,10 +108,19 @@ import { mapState } from "vuex";
export default {
components: {
ProfilePicture
ProfilePicture,
DropDown
},
data() {
return {
surveyItems,
surveySelectedItems: {
name: "",
gender: null,
age: null,
continent: null,
countries: null
},
alert: {
content: "",
show: false
@ -102,6 +178,16 @@ export default {
},
computed: {
...mapState("settingsModule", ["GDriveLinked"]),
filterCountry() {
const selectedContinentIndex = this.surveySelectedItems.continent;
const selectedContinent = this.surveyItems.continents[
selectedContinentIndex
];
const code = selectedContinent.code;
return this.surveyItems.countries.filter(element => {
return element.code == code;
});
},
user() {
return this.$store.getters.user;
},
@ -112,16 +198,60 @@ export default {
};
</script>
<style scoped>
.notice {
color: grey;
font-size: 15px;
margin-top: 20px;
margin-left: 30px;
}
.survey-title {
margin-top: 10px;
}
.survey {
display: flex;
margin: auto;
margin-top: 10px;
flex-flow: row wrap;
flex-direction: column;
}
.survey-input {
height: 24px;
padding: 10px;
background: rgba(61, 61, 61, 0.863);
margin-top: 5px;
}
.title {
margin-top: 30px;
display: flex;
align-content: center;
align-items: center;
margin-left: 25px;
font-size: 20px;
}
.title .material-icons {
color: cyan;
margin-right: 10px;
font-size: 30px;
}
.hidden {
display: none;
}
.my-profile-panel {
display: flex;
width: 100%;
height: 100px;
margin-top: 10px;
height: 100%;
flex-direction: column;
overflow: auto;
}
.profile-picture-outer{
.general-information {
display: flex;
width: 100%;
margin-top: 20px;
}
.profile-picture-outer {
display: flex;
z-index: 99999;
}
@ -209,7 +339,8 @@ export default {
background: rgb(83, 53, 53);
}
@media (max-width: 815px) {
.my-profile-panel {
.general-information {
display: block;
flex-direction: column;
}
.profile-picture {

View file

@ -35,6 +35,7 @@ export default {
this.$socket.emit('notification:dismiss', {channelID: this.channelID});
}
this.$store.dispatch('openChat', {
uniqueID: this.recipient.uniqueID,
channelID: this.channelID,
channelName: this.recipient.username
})

View file

@ -43,6 +43,10 @@
</div>
</div>
</div>
<div class="about-me-box">
<spinner v-if="!user"/>
<div class="title" v-else>About {{user.username}}</div>
</div>
</div>
</div>
</template>
@ -85,7 +89,7 @@ export default {
openChat() {
// todo: find from friends array and later, create new channels for people who are not friends.
this.$store.dispatch("openChat", {
channelID: this.channelID,
uniqueID: this.uniqueID,
channelName: this.user.username
});
}
@ -113,6 +117,23 @@ export default {
};
</script>
<style scoped>
.about-me-box{
display: flex;
flex-direction: column;
background: rgba(31, 31, 31, 0.704);
width: 300px;
border-radius: 10px;
overflow: hidden;
margin-left: 10px;
}
.title {
padding-top: 10px;
font-size: 20px;
text-align: center;
}
.drop-background {
position: absolute;
background: rgba(0, 0, 0, 0.521);
@ -126,20 +147,21 @@ export default {
.box {
margin: auto;
height: 330px;
width: 500px;
background: rgba(31, 31, 31, 0.904);
border-radius: 5px;
width: initial;
color: white;
display: flex;
flex-direction: column;
flex-direction: row;
user-select: none;
overflow: hidden;
}
.inner {
background: rgba(31, 31, 31, 0.904);
display: flex;
height: 100%;
width: 100%;
width: 500px;
flex-direction: column;
border-radius: 10px;
overflow: hidden;
}
.top {
display: flex;

View file

@ -2,14 +2,19 @@ import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import {store} from './store/index';
import MainApp from '../src/views/App.vue'
import HomePage from '../src/views/HomePage.vue'
import GDriveCallback from '../src/views/GDriveCallback.vue';
import VueSocketio from 'vue-socket.io-extended';
import io from 'socket.io-client';
import config from './config'
import VueMq from 'vue-mq'
import MainApp from '../src/views/App.vue'
import HomePage from '../src/views/HomePage.vue'
import GDriveCallback from '../src/views/GDriveCallback.vue';
// const MainApp = () => import('../src/views/App.vue');
// const HomePage = () => import('../src/views/HomePage.vue');
// const GDriveCallback = () => import( '../src/views/GDriveCallback.vue');
export const router = new VueRouter({
mode: 'history',
routes: [

View file

@ -1,7 +1,7 @@
import {instance, wrapper} from './Api';
export default {
post ( channelID ) {
return wrapper(instance().post(`channels/${channelID}`));
post ( uniqueID ) {
return wrapper(instance().post(`channels/${ uniqueID }`));
}
}

View file

@ -9,5 +9,10 @@ export default {
},
GDriveAuth (code) {
return wrapper(instance().post('/settings/drive/auth', {code}));
},
setApperance (apperance, boolean) {
return wrapper(instance().put('/settings/apperance', {
[apperance]: boolean
}));
}
}

View file

@ -15,7 +15,53 @@ const getters = {
};
const actions = {
async openChat(context, { channelID, channelName }) {
async openChat(context, { uniqueID, channelID, channelName }) {
if (channelName) context.commit("setChannelName", channelName);
const channels = context.rootState.channelModule.channels;
channelID = Object.keys(channels).find(_channelID => {
return channels[_channelID].recipients[0].uniqueID === uniqueID
})
const messages = context.state.messages[channelID];
const channel = channels[channelID];
if (channelID) {
context.commit("selectedChannelID", channelID);
} else {
context.commit("selectedChannelID", "Loading");
}
if (messages) return;
if (channel && !messages) return getMessages(channelID);
const { ok, error, result } = await channelService.post(uniqueID);
if (ok) {
context.commit("channel", result.data.channel);
getMessages(result.data.channel.channelID);
} else {
// TODO handle this
console.log(error);
}
async function getMessages(channelID) {
const { ok, error, result } = await messagesService.get(channelID);
if (ok) {
context.commit("selectedChannelID", channelID);
context.commit("messages", {
channelID: result.data.channelID,
messages: result.data.messages.reverse()
});
} else {
// TODO handle this
console.log(error.response);
}
}
},
// OLD STUFF
async openddChat(context, { channelID, channelName }) {
context.commit("selectedChannelID", channelID);
if (channelName) context.commit("setChannelName", channelName);
@ -66,7 +112,7 @@ const actions = {
const mutations = {
messages(state, data) {
Vue.set(state.messages, data.channelID, data.messages.reverse());
Vue.set(state.messages, data.channelID, data.messages);
},
addMessage(state, data) {
bus.$emit("newMessage", data);

View file

@ -8,7 +8,8 @@ import {
const state = {
GDriveLinked: false,
customEmojis: [],
recentEmojis: JSON.parse(localStorage.getItem('recentEmojis')) || []
recentEmojis: JSON.parse(localStorage.getItem('recentEmojis')) || [],
apperance: {}
}
const getters = {
@ -70,11 +71,19 @@ const actions = {
setCustomEmojis({commit}, customEmojis) {
commit('setCustomEmojis', customEmojis)
},
setApperance({commit}, data) {
commit('setApperance', data)
}
}
const mutations = {
setApperance(state, data) {
const apperance = state.apperance || {};
apperance[Object.keys(data)[0]] = data[Object.keys(data)[0]]
state['apperance'] = apperance
},
setSettings(state, settings) {
state = Object.assign(state, settings)
Vue.set(state, Object.assign(state, settings))
},
GoogleDriveLinked(state, status) {
Vue.set(state, 'GDriveLinked', status)

View file

@ -8,7 +8,9 @@ const config = [
new: [
'You can now make your own guild.',
"Tabs have been added at the top of the screen.",
"Added users information page which allows you to block, End friendship or message someone.",
"Added an option to display your messages on the right and other messages to the left.",
"Added users information page which allows you to block, End friendship, message someone and view their information.",
"Replaced 'Sending' and 'Sent' with icons."
],
fix: ["Some formatting issues with custom emojis have been fixed."],
next: ['link previews.']

242
src/utils/surveyItems.js Normal file
View file

@ -0,0 +1,242 @@
export default {
gender: [
{ emoji: "👦🏻", name: "Male" },
{ emoji: "👧🏼", name: "Female" },
{ emoji: "😶", name: "Rather not say" }
],
age: [
{ emoji: "", name: "13 or under" },
{ emoji: "", name: "14-16" },
{ emoji: "", name: "17-19" },
{ emoji: "", name: "20 or above" },
{ emoji: "😶", name: "Rather not say" }
],
continents: [
{ name: "Europe", emoji: "🍃", code: "EU" },
{ name: "Asia", emoji: "🍜", code: "AS" },
{ name: "North America", emoji: "🍟", code: "NA" },
{ name: "South America", emoji: "🌴", code: "SA" },
{ name: "Africa", emoji: "🦘", code: "AF" },
],
countries: [
{ name: "Andorra", emoji: "🇦🇩", code: "EU" },
{ name: "United Arab Emirates", emoji: "🇦🇪", code: "AS" },
{ name: "Afghanistan", emoji: "🇦🇫", code: "AS" },
{ name: "Antigua and Barbuda", emoji: "🇦🇬", code: "NA" },
{ name: "Anguilla", emoji: "🇦🇮", code: "NA" },
{ name: "Albania", emoji: "🇦🇱", code: "EU" },
{ name: "Armenia", emoji: "🇦🇲", code: "AS" },
{ name: "Angola", emoji: "🇦🇴", code: "AF" },
{ name: "Argentina", emoji: "🇦🇷", code: "SA" },
{ name: "Austria", emoji: "🇦🇹", code: "EU" },
{ name: "Aruba", emoji: "🇦🇼", code: "NA" },
{ name: "Åland", emoji: "🇦🇽", code: "EU" },
{ name: "Azerbaijan", emoji: "🇦🇿", code: "AS" },
{ name: "Bosnia and Herzegovina", emoji: "🇧🇦", code: "EU" },
{ name: "Barbados", emoji: "🇧🇧", code: "NA" },
{ name: "Bangladesh", emoji: "🇧🇩", code: "AS" },
{ name: "Belgium", emoji: "🇧🇪", code: "EU" },
{ name: "Burkina Faso", emoji: "🇧🇫", code: "AF" },
{ name: "Bulgaria", emoji: "🇧🇬", code: "EU" },
{ name: "Bahrain", emoji: "🇧🇭", code: "AS" },
{ name: "Burundi", emoji: "🇧🇮", code: "AF" },
{ name: "Benin", emoji: "🇧🇯", code: "AF" },
{ name: "Saint Barthélemy", emoji: "🇧🇱", code: "NA" },
{ name: "Bermuda", emoji: "🇧🇲", code: "NA" },
{ name: "Brunei", emoji: "🇧🇳", code: "AS" },
{ name: "Bolivia", emoji: "🇧🇴", code: "SA" },
{ name: "Bonaire", emoji: "🇧🇶", code: "NA" },
{ name: "Brazil", emoji: "🇧🇷", code: "SA" },
{ name: "Bahamas", emoji: "🇧🇸", code: "NA" },
{ name: "Bhutan", emoji: "🇧🇹", code: "AS" },
{ name: "Botswana", emoji: "🇧🇼", code: "AF" },
{ name: "Belarus", emoji: "🇧🇾", code: "EU" },
{ name: "Belize", emoji: "🇧🇿", code: "NA" },
{ name: "Canada", emoji: "🇨🇦", code: "NA" },
{ name: "Cocos [Keeling] Islands", emoji: "🇨🇨", code: "AS" },
{ name: "Democratic Republic of the Congo", emoji: "🇨🇩", code: "AF" },
{ name: "Central African Republic", emoji: "🇨🇫", code: "AF" },
{ name: "Republic of the Congo", emoji: "🇨🇬", code: "AF" },
{ name: "Switzerland", emoji: "🇨🇭", code: "EU" },
{ name: "Ivory Coast", emoji: "🇨🇮", code: "AF" },
{ name: "Chile", emoji: "🇨🇱", code: "SA" },
{ name: "Cameroon", emoji: "🇨🇲", code: "AF" },
{ name: "China", emoji: "🇨🇳", code: "AS" },
{ name: "Colombia", emoji: "🇨🇴", code: "SA" },
{ name: "Costa Rica", emoji: "🇨🇷", code: "NA" },
{ name: "Cuba", emoji: "🇨🇺", code: "NA" },
{ name: "Cape Verde", emoji: "🇨🇻", code: "AF" },
{ name: "Curacao", emoji: "🇨🇼", code: "NA" },
{ name: "Christmas Island", emoji: "🇨🇽", code: "AS" },
{ name: "Cyprus", emoji: "🇨🇾", code: "EU" },
{ name: "Czech Republic", emoji: "🇨🇿", code: "EU" },
{ name: "Germany", emoji: "🇩🇪", code: "EU" },
{ name: "Djibouti", emoji: "🇩🇯", code: "AF" },
{ name: "Denmark", emoji: "🇩🇰", code: "EU" },
{ name: "Dominica", emoji: "🇩🇲", code: "NA" },
{ name: "Dominican Republic", emoji: "🇩🇴", code: "NA" },
{ name: "Algeria", emoji: "🇩🇿", code: "AF" },
{ name: "Ecuador", emoji: "🇪🇨", code: "SA" },
{ name: "Estonia", emoji: "🇪🇪", code: "EU" },
{ name: "Egypt", emoji: "🇪🇬", code: "AF" },
{ name: "Western Sahara", emoji: "🇪🇭", code: "AF" },
{ name: "Eritrea", emoji: "🇪🇷", code: "AF" },
{ name: "Spain", emoji: "🇪🇸", code: "EU" },
{ name: "Ethiopia", emoji: "🇪🇹", code: "AF" },
{ name: "Finland", emoji: "🇫🇮", code: "EU" },
{ name: "Falkland Islands", emoji: "🇫🇰", code: "SA" },
{ name: "Faroe Islands", emoji: "🇫🇴", code: "EU" },
{ name: "France", emoji: "🇫🇷", code: "EU" },
{ name: "Gabon", emoji: "🇬🇦", code: "AF" },
{ name: "United Kingdom", emoji: "🇬🇧", code: "EU" },
{ name: "Grenada", emoji: "🇬🇩", code: "NA" },
{ name: "Georgia", emoji: "🇬🇪", code: "AS" },
{ name: "French Guiana", emoji: "🇬🇫", code: "SA" },
{ name: "Guernsey", emoji: "🇬🇬", code: "EU" },
{ name: "Ghana", emoji: "🇬🇭", code: "AF" },
{ name: "Gibraltar", emoji: "🇬🇮", code: "EU" },
{ name: "Greenland", emoji: "🇬🇱", code: "NA" },
{ name: "Gambia", emoji: "🇬🇲", code: "AF" },
{ name: "Guinea", emoji: "🇬🇳", code: "AF" },
{ name: "Guadeloupe", emoji: "🇬🇵", code: "NA" },
{ name: "Equatorial Guinea", emoji: "🇬🇶", code: "AF" },
{ name: "Greece", emoji: "🇬🇷", code: "EU" },
{ name: "Guatemala", emoji: "🇬🇹", code: "NA" },
{ name: "Guinea-Bissau", emoji: "🇬🇼", code: "AF" },
{ name: "Guyana", emoji: "🇬🇾", code: "SA" },
{ name: "Hong Kong", emoji: "🇭🇰", code: "AS" },
{ name: "Honduras", emoji: "🇭🇳", code: "NA" },
{ name: "Croatia", emoji: "🇭🇷", code: "EU" },
{ name: "Haiti", emoji: "🇭🇹", code: "NA" },
{ name: "Hungary", emoji: "🇭🇺", code: "EU" },
{ name: "Indonesia", emoji: "🇮🇩", code: "AS" },
{ name: "Ireland", emoji: "🇮🇪", code: "EU" },
{ name: "Israel", emoji: "🇮🇱", code: "AS" },
{ name: "Isle of Man", emoji: "🇮🇲", code: "EU" },
{ name: "India", emoji: "🇮🇳", code: "AS" },
{ name: "British Indian Ocean Territory", emoji: "🇮🇴", code: "AS" },
{ name: "Iraq", emoji: "🇮🇶", code: "AS" },
{ name: "Iran", emoji: "🇮🇷", code: "AS" },
{ name: "Iceland", emoji: "🇮🇸", code: "EU" },
{ name: "Italy", emoji: "🇮🇹", code: "EU" },
{ name: "Jersey", emoji: "🇯🇪", code: "EU" },
{ name: "Jamaica", emoji: "🇯🇲", code: "NA" },
{ name: "Jordan", emoji: "🇯🇴", code: "AS" },
{ name: "Japan", emoji: "🇯🇵", code: "AS" },
{ name: "Kenya", emoji: "🇰🇪", code: "AF" },
{ name: "Kyrgyzstan", emoji: "🇰🇬", code: "AS" },
{ name: "Cambodia", emoji: "🇰🇭", code: "AS" },
{ name: "Comoros", emoji: "🇰🇲", code: "AF" },
{ name: "Saint Kitts and Nevis", emoji: "🇰🇳", code: "NA" },
{ name: "North Korea", emoji: "🇰🇵", code: "AS" },
{ name: "South Korea", emoji: "🇰🇷", code: "AS" },
{ name: "Kuwait", emoji: "🇰🇼", code: "AS" },
{ name: "Cayman Islands", emoji: "🇰🇾", code: "NA" },
{ name: "Kazakhstan", emoji: "🇰🇿", code: "AS" },
{ name: "Laos", emoji: "🇱🇦", code: "AS" },
{ name: "Lebanon", emoji: "🇱🇧", code: "AS" },
{ name: "Saint Lucia", emoji: "🇱🇨", code: "NA" },
{ name: "Liechtenstein", emoji: "🇱🇮", code: "EU" },
{ name: "Sri Lanka", emoji: "🇱🇰", code: "AS" },
{ name: "Liberia", emoji: "🇱🇷", code: "AF" },
{ name: "Lesotho", emoji: "🇱🇸", code: "AF" },
{ name: "Lithuania", emoji: "🇱🇹", code: "EU" },
{ name: "Luxembourg", emoji: "🇱🇺", code: "EU" },
{ name: "Latvia", emoji: "🇱🇻", code: "EU" },
{ name: "Libya", emoji: "🇱🇾", code: "AF" },
{ name: "Morocco", emoji: "🇲🇦", code: "AF" },
{ name: "Monaco", emoji: "🇲🇨", code: "EU" },
{ name: "Moldova", emoji: "🇲🇩", code: "EU" },
{ name: "Montenegro", emoji: "🇲🇪", code: "EU" },
{ name: "Saint Martin", emoji: "🇲🇫", code: "NA" },
{ name: "Madagascar", emoji: "🇲🇬", code: "AF" },
{ name: "Macedonia", emoji: "🇲🇰", code: "EU" },
{ name: "Mali", emoji: "🇲🇱", code: "AF" },
{ name: "Myanmar [Burma]", emoji: "🇲🇲", code: "AS" },
{ name: "Mongolia", emoji: "🇲🇳", code: "AS" },
{ name: "Macao", emoji: "🇲🇴", code: "AS" },
{ name: "Martinique", emoji: "🇲🇶", code: "NA" },
{ name: "Mauritania", emoji: "🇲🇷", code: "AF" },
{ name: "Montserrat", emoji: "🇲🇸", code: "NA" },
{ name: "Malta", emoji: "🇲🇹", code: "EU" },
{ name: "Mauritius", emoji: "🇲🇺", code: "AF" },
{ name: "Maldives", emoji: "🇲🇻", code: "AS" },
{ name: "Malawi", emoji: "🇲🇼", code: "AF" },
{ name: "Mexico", emoji: "🇲🇽", code: "NA" },
{ name: "Malaysia", emoji: "🇲🇾", code: "AS" },
{ name: "Mozambique", emoji: "🇲🇿", code: "AF" },
{ name: "Namibia", emoji: "🇳🇦", code: "AF" },
{ name: "Niger", emoji: "🇳🇪", code: "AF" },
{ name: "Nigeria", emoji: "🇳🇬", code: "AF" },
{ name: "Nicaragua", emoji: "🇳🇮", code: "NA" },
{ name: "Netherlands", emoji: "🇳🇱", code: "EU" },
{ name: "Norway", emoji: "🇳🇴", code: "EU" },
{ name: "Nepal", emoji: "🇳🇵", code: "AS" },
{ name: "Oman", emoji: "🇴🇲", code: "AS" },
{ name: "Panama", emoji: "🇵🇦", code: "NA" },
{ name: "Peru", emoji: "🇵🇪", code: "SA" },
{ name: "Philippines", emoji: "🇵🇭", code: "AS" },
{ name: "Pakistan", emoji: "🇵🇰", code: "AS" },
{ name: "Poland", emoji: "🇵🇱", code: "EU" },
{ name: "Saint Pierre and Miquelon", emoji: "🇵🇲", code: "NA" },
{ name: "Puerto Rico", emoji: "🇵🇷", code: "NA" },
{ name: "Palestine", emoji: "🇵🇸", code: "AS" },
{ name: "Portugal", emoji: "🇵🇹", code: "EU" },
{ name: "Paraguay", emoji: "🇵🇾", code: "SA" },
{ name: "Qatar", emoji: "🇶🇦", code: "AS" },
{ name: "Réunion", emoji: "🇷🇪", code: "AF" },
{ name: "Romania", emoji: "🇷🇴", code: "EU" },
{ name: "Serbia", emoji: "🇷🇸", code: "EU" },
{ name: "Russia", emoji: "🇷🇺", code: "EU" },
{ name: "Rwanda", emoji: "🇷🇼", code: "AF" },
{ name: "Saudi Arabia", emoji: "🇸🇦", code: "AS" },
{ name: "Seychelles", emoji: "🇸🇨", code: "AF" },
{ name: "Sudan", emoji: "🇸🇩", code: "AF" },
{ name: "Sweden", emoji: "🇸🇪", code: "EU" },
{ name: "Singapore", emoji: "🇸🇬", code: "AS" },
{ name: "Saint Helena", emoji: "🇸🇭", code: "AF" },
{ name: "Slovenia", emoji: "🇸🇮", code: "EU" },
{ name: "Svalbard and Jan Mayen", emoji: "🇸🇯", code: "EU" },
{ name: "Slovakia", emoji: "🇸🇰", code: "EU" },
{ name: "Sierra Leone", emoji: "🇸🇱", code: "AF" },
{ name: "San Marino", emoji: "🇸🇲", code: "EU" },
{ name: "Senegal", emoji: "🇸🇳", code: "AF" },
{ name: "Somalia", emoji: "🇸🇴", code: "AF" },
{ name: "Suriname", emoji: "🇸🇷", code: "SA" },
{ name: "South Sudan", emoji: "🇸🇸", code: "AF" },
{ name: "São Tomé and Príncipe", emoji: "🇸🇹", code: "AF" },
{ name: "El Salvador", emoji: "🇸🇻", code: "NA" },
{ name: "Sint Maarten", emoji: "🇸🇽", code: "NA" },
{ name: "Syria", emoji: "🇸🇾", code: "AS" },
{ name: "Swaziland", emoji: "🇸🇿", code: "AF" },
{ name: "Turks and Caicos Islands", emoji: "🇹🇨", code: "NA" },
{ name: "Chad", emoji: "🇹🇩", code: "AF" },
{ name: "Togo", emoji: "🇹🇬", code: "AF" },
{ name: "Thailand", emoji: "🇹🇭", code: "AS" },
{ name: "Tajikistan", emoji: "🇹🇯", code: "AS" },
{ name: "Turkmenistan", emoji: "🇹🇲", code: "AS" },
{ name: "Tunisia", emoji: "🇹🇳", code: "AF" },
{ name: "Turkey", emoji: "🇹🇷", code: "AS" },
{ name: "Trinidad and Tobago", emoji: "🇹🇹", code: "NA" },
{ name: "Taiwan", emoji: "🇹🇼", code: "AS" },
{ name: "Tanzania", emoji: "🇹🇿", code: "AF" },
{ name: "Ukraine", emoji: "🇺🇦", code: "EU" },
{ name: "Uganda", emoji: "🇺🇬", code: "AF" },
{ name: "United States", emoji: "🇺🇸", code: "NA" },
{ name: "Uruguay", emoji: "🇺🇾", code: "SA" },
{ name: "Uzbekistan", emoji: "🇺🇿", code: "AS" },
{ name: "Vatican City", emoji: "🇻🇦", code: "EU" },
{ name: "Saint Vincent and the Grenadines", emoji: "🇻🇨", code: "NA" },
{ name: "Venezuela", emoji: "🇻🇪", code: "SA" },
{ name: "British Virgin Islands", emoji: "🇻🇬", code: "NA" },
{ name: "U.S. Virgin Islands", emoji: "🇻🇮", code: "NA" },
{ name: "Vietnam", emoji: "🇻🇳", code: "AS" },
{ name: "Kosovo", emoji: "🇽🇰", code: "EU" },
{ name: "Yemen", emoji: "🇾🇪", code: "AS" },
{ name: "Mayotte", emoji: "🇾🇹", code: "AF" },
{ name: "South Africa", emoji: "🇿🇦", code: "AF" },
{ name: "Zambia", emoji: "🇿🇲", code: "AF" },
{ name: "Zimbabwe", emoji: "🇿🇼", code: "AF" }
]
};

View file

@ -26,6 +26,13 @@
</div>
</div>
</div>
<div class="twitter-outer">
<twitter class="twitter">
<div slot="loading">loading .....</div>
<a class="twitter-timeline" data-height="500" data-theme="dark" href="https://twitter.com/NertiviaApp?ref_src=twsrc%5Etfw">Tweets by NertiviaApp</a>
</twitter>
</div>
</div>
<RightPanel :class="{'show-menu-content': showMobileMenu }" />
</div>
@ -37,6 +44,7 @@
</template>
<script>
import { twitter } from 'vue-twitter'
import {bus} from '../main';
import RightPanel from "./../components/homePage/RightPanel.vue"
import ChangeLog from "./../components/ChangeLog.vue"
@ -44,7 +52,8 @@ import changelog from '@/utils/changelog.js'
export default {
components: {
RightPanel,
ChangeLog
ChangeLog,
twitter
},
data() {
return {
@ -70,7 +79,15 @@ export default {
<style scoped>
.twitter-outer{
margin: auto;
width: 600px;
opacity: 0.8;
transition: 0.3s;
}
.twitter-outer:hover{
opacity: 1;
}
.fade-enter-active, .fade-leave-active {
transition: opacity .2s;
}
@ -275,6 +292,11 @@ button {
}
}
@media (max-width: 649px) {
.twitter-outer{
margin-top: 20px;
margin-bottom: 50px;
width: initial;
}
.change-list{
flex-direction: column;
}