Recv/public/src/App.vue

183 lines
3.6 KiB
Vue

<template>
<div id="app">
<div v-cloak>
<div class="notificationContainer">
<div class="notification" :class="{ error: notification != null && notification.error }" v-if="notification != null" @click.prevent="hideNotification">
<span class="message">{{ notification.message }}</span>
</div>
</div>
<div class="content">
<div class="logo">
<img src="/images/logo.png">
</div>
<router-view></router-view>
</div>
<div class="disclaimer">
{{ $t('disclaimer') }}
</div>
</div>
</div>
</template>
<script>
import _ from 'lodash';
import shared from './shared';
if (typeof customMessages !== 'undefined')
{
_.merge(messages, customMessages);
if (customMessages.hasOwnProperty('allLocales'))
{
for (var key in messages)
{
if (key !== 'allLocales' && messages.hasOwnProperty(key))
_.merge(messages[key], customMessages.allLocales);
}
}
}
export default {
name: 'app',
data () {
return {
notification: null
}
},
created()
{
var self = this;
document.title = self.$i18n.t('title');
self.notificationTimer = null;
shared.$on('showNotification', (message, error) =>
{
var self = this;
self.notification = {
message: message,
error: error
};
if (self.notificationTimer != null)
clearTimeout(self.notificationTimer);
self.notificationTimer = setTimeout(() =>
{
self.notification = null;
self.notificationTimer = null;
}, 5000);
});
shared.$on('hideNotification', () =>
{
var self = this;
self.notification = null;
if (self.notificationTimer != null)
{
clearTimeout(self.notificationTimer);
self.notificationTimer = null;
}
});
}
}
</script>
<style lang="scss">
@import '../../node_modules/purecss/build/base.css';
@import '../../node_modules/purecss/build/buttons.css';
@import '../../node_modules/purecss/build/forms.css';
@import '../../node_modules/purecss/build/grids.css';
/* open-sans-regular - latin */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url('/fonts/open-sans-v15-latin-regular.eot'); /* IE9 Compat Modes */
src: local('Open Sans Regular'), local('OpenSans-Regular'),
url('/fonts/open-sans-v15-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/fonts/open-sans-v15-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
url('/fonts/open-sans-v15-latin-regular.woff') format('woff'), /* Modern Browsers */
url('/fonts/open-sans-v15-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
url('/fonts/open-sans-v15-latin-regular.svg#OpenSans') format('svg'); /* Legacy iOS */
}
body
{
background-color: #f0f0f0;
font-family: 'Open Sans', sans-serif;
font-size: 12pt;
}
#app
{
margin-left: auto;
margin-right: auto;
max-width: 768px;
}
.content
{
background-color: white;
margin: 2rem;
padding: 2rem;
box-shadow: 0 0 15px #c0c0c0;
}
.notificationContainer
{
position: fixed;
top: 1.5rem;
z-index: 666;
width: 512px;
left: 50%;
}
.notification
{
background: #d5e8f6;
border: solid 1px rgba(0, 0, 0, 0.25);
box-shadow: 0 0 10px #c0c0c0;
color: black;
cursor: pointer;
padding: .5em;
margin-bottom: 2rem;
position: relative;
left: -50%;
}
.notification .message
{
white-space: pre;
}
.notification.error
{
background: #973a38;
}
.logo
{
margin-bottom: 2rem;
text-align: center;
}
.disclaimer
{
font-size: 8pt;
text-align: center;
}
</style>