First Committ
This commit is contained in:
314
src/App.scss
Executable file
314
src/App.scss
Executable file
@@ -0,0 +1,314 @@
|
||||
body {
|
||||
font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
color: #a7a7a7;
|
||||
line-height: 1.5;
|
||||
//font-size: 1rem;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 100%; // default font size (browser 16) -> (10 62.5%)
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 125%; // default font size (browser 16) -> (10 62.5%)
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
|
||||
$grayshadow: #555;
|
||||
|
||||
$graytext: #555;
|
||||
|
||||
$textcol: blue;
|
||||
$textcol_scuro: darkblue;
|
||||
$heightBtn: 100%;
|
||||
|
||||
.flex-item {
|
||||
// background-color: #d5e2eb;
|
||||
display: flex;
|
||||
padding: 2px;
|
||||
margin: 2px;
|
||||
margin-left: 3px;
|
||||
margin-right: 3px;
|
||||
color: #000;
|
||||
font-size: 1rem;
|
||||
height: $heightBtn;
|
||||
line-height: $heightBtn;
|
||||
vertical-align: middle;
|
||||
//flex: 0 0 100%;
|
||||
}
|
||||
|
||||
.fade-enter-active, .fade-leave-active {
|
||||
transition: opacity .2s;
|
||||
}
|
||||
|
||||
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.slide-enter {
|
||||
}
|
||||
|
||||
.slide-enter-active {
|
||||
animation: slide-in 0.2s ease-out forwards;
|
||||
}
|
||||
|
||||
.slide-leave {
|
||||
}
|
||||
|
||||
.slide-leave-active {
|
||||
animation: slide-out 0.5s ease-out forwards;
|
||||
}
|
||||
|
||||
@keyframes slide-in {
|
||||
from {
|
||||
transform: translateX(-500px);
|
||||
}
|
||||
to {
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-out {
|
||||
from {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: translateX(1600px);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.my-notif-class{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mybanner {
|
||||
font-weight: bold;
|
||||
font-size: 1.1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lowperc {
|
||||
color: red;
|
||||
}
|
||||
.medperc {
|
||||
color: blue;
|
||||
}
|
||||
.highperc {
|
||||
color: green;
|
||||
}
|
||||
|
||||
|
||||
.hide-if-small {
|
||||
@media (max-width: 600px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.thiny-if-small {
|
||||
@media (max-width: 600px) {
|
||||
max-width: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
.links, .links a {
|
||||
text-shadow: 1px 1px 1px #555 !important;
|
||||
// font-weight: bold;
|
||||
color: cornflowerblue !important;
|
||||
}
|
||||
.links:hover {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.text-subtitle1 {
|
||||
font-size: 1.35rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.75rem;
|
||||
text-shadow: .25 .25rem .5rem $grayshadow;
|
||||
letter-spacing: .00937em;
|
||||
&.big {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.text-subtitle2 {
|
||||
font-size: 1.15rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.75rem;
|
||||
letter-spacing: .00937em;
|
||||
text-shadow: .25rem .25rem .5rem $grayshadow;
|
||||
}
|
||||
|
||||
.text-subtitle3 {
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.75rem;
|
||||
letter-spacing: .00937em;
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 718px) {
|
||||
// PER VERSIONE MOBILE
|
||||
|
||||
p {
|
||||
font-size: 100%; // default font size (browser 16) -> (10 62.5%)
|
||||
font-family: "Abyssinica SIL", serif;
|
||||
text-justify: auto;
|
||||
margin: 0 0 4px;
|
||||
}
|
||||
|
||||
.text-subtitle1 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
.text-subtitle2 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.text-subtitle3 {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.cltexth3 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.text-big{
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.my-card {
|
||||
width: 100%;
|
||||
max-width: 350px;
|
||||
min-width: 300px;
|
||||
padding: 1rem 1rem;
|
||||
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.text-trans {
|
||||
opacity: 0.9;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
|
||||
filter: alpha(opacity=90);
|
||||
}
|
||||
|
||||
.text-spacetrans {
|
||||
padding: 0 !important;
|
||||
background: rgba(0,0,0,0.3) !important;
|
||||
border-radius: 30px !important;
|
||||
}
|
||||
|
||||
.text-shadow {
|
||||
text-shadow: .15rem .15rem .15rem $grayshadow;
|
||||
}
|
||||
|
||||
.citazione{
|
||||
font-size: 0.75rem;
|
||||
font-family: "Lucida Calligraphy", serif;
|
||||
}
|
||||
|
||||
.cltexth3, .cltexth2, .cltexth4 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.75rem;
|
||||
letter-spacing: .01em;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.cltexth4 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.cltexth2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.boldhigh, .boldop, .text-big{
|
||||
font-weight: 500;
|
||||
text-shadow: .05rem .05rem .05rem $grayshadow;
|
||||
}
|
||||
.boldop{
|
||||
color: darkblue;
|
||||
}
|
||||
|
||||
.text-big{
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.center_to_image{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.center_img {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.padding_cell {
|
||||
padding: 0.75rem 0.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 3000px) {
|
||||
.q-parallax__media > img {
|
||||
max-height: 550px !important;
|
||||
min-width:inherit !important;
|
||||
min-height: inherit !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
.q-parallax__media > img {
|
||||
max-height: 500px !important;
|
||||
min-width:inherit !important;
|
||||
min-height: inherit !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 800px) {
|
||||
.q-parallax__media > img {
|
||||
max-height: 450px !important;
|
||||
min-width:inherit !important;
|
||||
min-height: inherit !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 718px) {
|
||||
.q-parallax__media > img {
|
||||
max-height: 450px !important;
|
||||
min-height: inherit !important;
|
||||
min-width:100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
// preloading images:
|
||||
@media screen {
|
||||
div#preloader {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
top: -9999px;
|
||||
}
|
||||
div#preloader img {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@media print {
|
||||
div#preloader,
|
||||
div#preloader img {
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
91
src/App.ts
Executable file
91
src/App.ts
Executable file
@@ -0,0 +1,91 @@
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { BannerCookies } from '@components'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
import { useGlobalStore } from './store/globalStore'
|
||||
import { useUserStore } from './store/UserStore'
|
||||
import { Header } from './components/Header'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
appHeader: Header,
|
||||
BannerCookies, /* , CPreloadImages */
|
||||
},
|
||||
setup() {
|
||||
const route = useRoute()
|
||||
|
||||
const backgroundColor = 'whitesmoke'
|
||||
const $q = useQuasar()
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const { t } = useI18n();
|
||||
|
||||
const listaRoutingNoLogin = ['/vreg?', '/offline']
|
||||
|
||||
function meta() {
|
||||
return {
|
||||
title: t('msg.myAppName'),
|
||||
keywords: [{ name: 'keywords', content: 'associazione shen, centro olistico lugo' },
|
||||
{ name: 'description', content: t('msg.myAppDescription') }],
|
||||
// equiv: { 'http-equiv': 'Content-Type', 'content': 'text/html; charset=UTF-8' }
|
||||
}
|
||||
}
|
||||
|
||||
function created() {
|
||||
if (process.env.DEV) {
|
||||
console.info('SESSIONE IN SVILUPPO ! (DEV)')
|
||||
// console.info(process.env)
|
||||
}
|
||||
if (process.env.PROD) {
|
||||
console.info('SESSIONE IN PRODUZIONE!')
|
||||
// console.info(process.env)
|
||||
}
|
||||
|
||||
// Make autologin only if some routing
|
||||
|
||||
// console.log('window.location.href', window.location.href)
|
||||
|
||||
let chiamaautologin = true
|
||||
listaRoutingNoLogin.forEach((mystr) => {
|
||||
if (window.location.href.includes(mystr)) {
|
||||
chiamaautologin = false
|
||||
}
|
||||
})
|
||||
|
||||
if (chiamaautologin) {
|
||||
// console.log('CHIAMA autologin_FromLocalStorage')
|
||||
userStore.autologin_FromLocalStorage()
|
||||
.then((loadstorage) => {
|
||||
if (loadstorage) {
|
||||
|
||||
/*
|
||||
if (toolsext.getLocale() !== '') {
|
||||
// console.log('SETLOCALE :', this.$i18n.locale)
|
||||
this.$i18n.locale = toolsext.getLocale() // Set Lang
|
||||
} else {
|
||||
userStore.setlang(this.$i18n.locale)
|
||||
}
|
||||
*/
|
||||
|
||||
// console.log('lang CARICATO:', this.$i18n.locale)
|
||||
|
||||
// ++Todo: conv: globalroutines(this, 'loadapp', '')
|
||||
// this.$router.replace('/')
|
||||
|
||||
// Create Subscription to Push Notification
|
||||
// ++Todo: conv: globalStore.createPushSubscription()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Calling the Server for updates ?
|
||||
// Check the verified_email
|
||||
}
|
||||
|
||||
created()
|
||||
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
}
|
||||
25
src/App.vue
Executable file
25
src/App.vue
Executable file
@@ -0,0 +1,25 @@
|
||||
<template>
|
||||
<div id="q-app">
|
||||
<div>
|
||||
<q-layout view="hHh Lpr lff" class="shadow-2 rounded-borders">
|
||||
<app-header></app-header>
|
||||
<q-ajax-bar></q-ajax-bar>
|
||||
|
||||
<!--<CPreloadImages :arrimg="static_data.preLoadImages">
|
||||
</CPreloadImages>-->
|
||||
|
||||
<q-page-container>
|
||||
<transition name="fade" mode="out-in">
|
||||
<router-view/>
|
||||
</transition>
|
||||
</q-page-container>
|
||||
</q-layout>
|
||||
</div>
|
||||
<BannerCookies urlInfo="/policy"></BannerCookies>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./App.ts">
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import './App.scss';
|
||||
</style>
|
||||
18
src/App.vue.test
Executable file
18
src/App.vue.test
Executable file
@@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<div id="q-app">
|
||||
<div>
|
||||
|
||||
<q-layout view="hHh Lpr lff" class="shadow-2 rounded-borders">
|
||||
<q-page-container>
|
||||
<router-view/>
|
||||
|
||||
</q-page-container>
|
||||
</q-layout>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./App.ts">
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import './App.scss';
|
||||
</style>
|
||||
15
src/assets/quasar-logo-vertical.svg
Executable file
15
src/assets/quasar-logo-vertical.svg
Executable file
@@ -0,0 +1,15 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 356 360">
|
||||
<path
|
||||
d="M43.4 303.4c0 3.8-2.3 6.3-7.1 6.3h-15v-22h14.4c4.3 0 6.2 2.2 6.2 5.2 0 2.6-1.5 4.4-3.4 5 2.8.4 4.9 2.5 4.9 5.5zm-8-13H24.1v6.9H35c2.1 0 4-1.3 4-3.8 0-2.2-1.3-3.1-3.7-3.1zm5.1 12.6c0-2.3-1.8-3.7-4-3.7H24.2v7.7h11.7c3.4 0 4.6-1.8 4.6-4zm36.3 4v2.7H56v-22h20.6v2.7H58.9v6.8h14.6v2.3H58.9v7.5h17.9zm23-5.8v8.5H97v-8.5l-11-13.4h3.4l8.9 11 8.8-11h3.4l-10.8 13.4zm19.1-1.8V298c0-7.9 5.2-10.7 12.7-10.7 7.5 0 13 2.8 13 10.7v1.4c0 7.9-5.5 10.8-13 10.8s-12.7-3-12.7-10.8zm22.7 0V298c0-5.7-3.9-8-10-8-6 0-9.8 2.3-9.8 8v1.4c0 5.8 3.8 8.1 9.8 8.1 6 0 10-2.3 10-8.1zm37.2-11.6v21.9h-2.9l-15.8-17.9v17.9h-2.8v-22h3l15.6 18v-18h2.9zm37.9 10.2v1.3c0 7.8-5.2 10.4-12.4 10.4H193v-22h11.2c7.2 0 12.4 2.8 12.4 10.3zm-3 0c0-5.3-3.3-7.6-9.4-7.6h-8.4V307h8.4c6 0 9.5-2 9.5-7.7V298zm50.8-7.6h-9.7v19.3h-3v-19.3h-9.7v-2.6h22.4v2.6zm34.4-2.6v21.9h-3v-10.1h-16.8v10h-2.8v-21.8h2.8v9.2H296v-9.2h2.9zm34.9 19.2v2.7h-20.7v-22h20.6v2.7H316v6.8h14.5v2.3H316v7.5h17.8zM24 340.2v7.3h13.9v2.4h-14v9.6H21v-22h20v2.7H24zm41.5 11.4h-9.8v7.9H53v-22h13.3c5.1 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6H66c3.1 0 5.3-1.5 5.3-4.7 0-3.3-2.2-4.1-5.3-4.1H55.7v8.8zm47.9 6.2H89l-2 4.3h-3.2l10.7-22.2H98l10.7 22.2h-3.2l-2-4.3zm-1-2.3l-6.3-13-6 13h12.2zm46.3-15.3v21.9H146v-17.2L135.7 358h-2.1l-10.2-15.6v17h-2.8v-21.8h3l11 16.9 11.3-17h3zm35 19.3v2.6h-20.7v-22h20.6v2.7H166v6.8h14.5v2.3H166v7.6h17.8zm47-19.3l-8.3 22h-3l-7.1-18.6-7 18.6h-3l-8.2-22h3.3L204 356l6.8-18.5h3.4L221 356l6.6-18.5h3.3zm10 11.6v-1.4c0-7.8 5.2-10.7 12.7-10.7 7.6 0 13 2.9 13 10.7v1.4c0 7.9-5.4 10.8-13 10.8-7.5 0-12.7-3-12.7-10.8zm22.8 0v-1.4c0-5.7-4-8-10-8s-9.9 2.3-9.9 8v1.4c0 5.8 3.8 8.2 9.8 8.2 6.1 0 10-2.4 10-8.2zm28.3 2.4h-9.8v7.9h-2.8v-22h13.2c5.2 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6h10.2c3 0 5.2-1.5 5.2-4.7 0-3.3-2.1-4.1-5.2-4.1h-10.2v8.8zm40.3-1.5l-6.8 5.6v6.4h-2.9v-22h2.9v12.3l15.2-12.2h3.7l-9.9 8.1 10.3 13.8h-3.6l-8.9-12z" />
|
||||
<path fill="#050A14"
|
||||
d="M188.4 71.7a10.4 10.4 0 01-20.8 0 10.4 10.4 0 1120.8 0zM224.2 45c-2.2-3.9-5-7.5-8.2-10.7l-12 7c-3.7-3.2-8-5.7-12.6-7.3a49.4 49.4 0 00-9.7 13.9 59 59 0 0140.1 14l7.6-4.4a57 57 0 00-5.2-12.5zM178 125.1c4.5 0 9-.6 13.4-1.7v-14a40 40 0 0012.5-7.2 47.7 47.7 0 00-7.1-15.3 59 59 0 01-32.2 27.7v8.7c4.4 1.2 8.9 1.8 13.4 1.8zM131.8 45c-2.3 4-4 8.1-5.2 12.5l12 7a40 40 0 000 14.4c5.7 1.5 11.3 2 16.9 1.5a59 59 0 01-8-41.7l-7.5-4.3c-3.2 3.2-6 6.7-8.2 10.6z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M224.2 98.4c2.3-3.9 4-8 5.2-12.4l-12-7a40 40 0 000-14.5c-5.7-1.5-11.3-2-16.9-1.5a59 59 0 018 41.7l7.5 4.4c3.2-3.2 6-6.8 8.2-10.7zm-92.4 0c2.2 4 5 7.5 8.2 10.7l12-7a40 40 0 0012.6 7.3c4-4.1 7.3-8.8 9.7-13.8a59 59 0 01-40-14l-7.7 4.4c1.2 4.3 3 8.5 5.2 12.4zm46.2-80c-4.5 0-9 .5-13.4 1.7V34a40 40 0 00-12.5 7.2c1.5 5.7 4 10.8 7.1 15.4a59 59 0 0132.2-27.7V20a53.3 53.3 0 00-13.4-1.8z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M178 9.2a62.6 62.6 0 11-.1 125.2A62.6 62.6 0 01178 9.2m0-9.2a71.7 71.7 0 100 143.5A71.7 71.7 0 00178 0z" />
|
||||
<path fill="#050A14"
|
||||
d="M96.6 212v4.3c-9.2-.8-15.4-5.8-15.4-17.8V180h4.6v18.4c0 8.6 4 12.6 10.8 13.5zm16-31.9v18.4c0 8.9-4.3 12.8-10.9 13.5v4.4c9.2-.7 15.5-5.6 15.5-18v-18.3h-4.7zM62.2 199v-2.2c0-12.7-8.8-17.4-21-17.4-12.1 0-20.7 4.7-20.7 17.4v2.2c0 12.8 8.6 17.6 20.7 17.6 1.5 0 3-.1 4.4-.3l11.8 6.2 2-3.3-8.2-4-6.4-3.1a32 32 0 01-3.6.2c-9.8 0-16-3.9-16-13.3v-2.2c0-9.3 6.2-13.1 16-13.1 9.9 0 16.3 3.8 16.3 13.1v2.2c0 5.3-2.1 8.7-5.6 10.8l4.8 2.4c3.4-2.8 5.5-7 5.5-13.2zM168 215.6h5.1L156 179.7h-4.8l17 36zM143 205l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.8-3.7H143zm133.7 10.7h5.2l-17.3-35.9h-4.8l17 36zm-25-10.7l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.7-3.7h-14.8zm73.8-2.5c6-1.2 9-5.4 9-11.4 0-8-4.5-10.9-12.9-10.9h-21.4v35.5h4.6v-31.3h16.5c5 0 8.5 1.4 8.5 6.7 0 5.2-3.5 7.7-8.5 7.7h-11.4v4.1h10.7l9.3 12.8h5.5l-9.9-13.2zm-117.4 9.9c-9.7 0-14.7-2.5-18.6-6.3l-2.2 3.8c5.1 5 11 6.7 21 6.7 1.6 0 3.1-.1 4.6-.3l-1.9-4h-3zm18.4-7c0-6.4-4.7-8.6-13.8-9.4l-10.1-1c-6.7-.7-9.3-2.2-9.3-5.6 0-2.5 1.4-4 4.6-5l-1.8-3.8c-4.7 1.4-7.5 4.2-7.5 8.9 0 5.2 3.4 8.7 13 9.6l11.3 1.2c6.4.6 8.9 2 8.9 5.4 0 2.7-2.1 4.7-6 5.8l1.8 3.9c5.3-1.6 8.9-4.7 8.9-10zm-20.3-21.9c7.9 0 13.3 1.8 18.1 5.7l1.8-3.9a30 30 0 00-19.6-5.9c-2 0-4 .1-5.7.3l1.9 4 3.5-.2z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M.5 251.9c29.6-.5 59.2-.8 88.8-1l88.7-.3 88.7.3 44.4.4 44.4.6-44.4.6-44.4.4-88.7.3-88.7-.3a7981 7981 0 01-88.8-1z" />
|
||||
<path fill="none" d="M-565.2 324H-252v15.8h-313.2z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
7
src/boot/.directory
Executable file
7
src/boot/.directory
Executable file
@@ -0,0 +1,7 @@
|
||||
[Dolphin]
|
||||
Timestamp=2019,10,10,17,25,7
|
||||
Version=4
|
||||
ViewMode=1
|
||||
|
||||
[Settings]
|
||||
HiddenFilesShown=true
|
||||
0
src/boot/.gitkeep
Executable file
0
src/boot/.gitkeep
Executable file
20
src/boot/axios.ts
Executable file
20
src/boot/axios.ts
Executable file
@@ -0,0 +1,20 @@
|
||||
import axios from 'axios'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
// const api = axios.create({ baseURL: 'https://api.example.com' })
|
||||
|
||||
export default boot(({ app }) => {
|
||||
// for use inside Vue files (Options API) through this.$axios and this.$api
|
||||
|
||||
app.config.globalProperties.$axios = axios
|
||||
// ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form)
|
||||
// so you won't necessarily have to import axios in each vue file
|
||||
|
||||
// app.config.globalProperties.$api = api
|
||||
// ^ ^ ^ this will allow you to use this.$api (for Vue Options API form)
|
||||
// so you can easily perform requests against your app's API
|
||||
//
|
||||
})
|
||||
|
||||
export { axios }
|
||||
// export { axios, api }
|
||||
6
src/boot/dialog.ts
Executable file
6
src/boot/dialog.ts
Executable file
@@ -0,0 +1,6 @@
|
||||
import { Dialog } from 'quasar'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default boot(({ app }) => {
|
||||
app.use(Dialog)
|
||||
})
|
||||
12
src/boot/dragula.ts.off
Executable file
12
src/boot/dragula.ts.off
Executable file
@@ -0,0 +1,12 @@
|
||||
import { Vue, Options } from "vue-class-component"
|
||||
// import { Vue2Dragula } from 'vue2-dragula'
|
||||
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default ({ app }) => {
|
||||
app.use(Vue2Dragula, {
|
||||
logging: {
|
||||
service: false // to only log methods in service (DragulaService)
|
||||
}
|
||||
})
|
||||
}
|
||||
9
src/boot/error-handler.ts
Executable file
9
src/boot/error-handler.ts
Executable file
@@ -0,0 +1,9 @@
|
||||
import { boot } from 'quasar/wrappers'
|
||||
// import something here
|
||||
import errorHandler from '../error-handler'
|
||||
|
||||
// leave the export, even if you don't use it
|
||||
export default boot(({ app, router }) => {
|
||||
// something to do
|
||||
app.config.globalProperties.$errorHandler = errorHandler
|
||||
})
|
||||
8
src/boot/globalroutines.ts
Executable file
8
src/boot/globalroutines.ts
Executable file
@@ -0,0 +1,8 @@
|
||||
import { boot } from 'quasar/wrappers'
|
||||
import globalroutines from '../globalroutines'
|
||||
|
||||
// @ts-ignore
|
||||
export default boot(({ app, router, store }) => {
|
||||
// something to do
|
||||
app.config.globalProperties.$globalroutines = globalroutines
|
||||
})
|
||||
6
src/boot/googlemap.ts
Executable file
6
src/boot/googlemap.ts
Executable file
@@ -0,0 +1,6 @@
|
||||
// import google from '../googlemap'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default boot(({ app, router }) => {
|
||||
// app.config.globalProperties.$google = google
|
||||
})
|
||||
57
src/boot/guard.ts
Executable file
57
src/boot/guard.ts
Executable file
@@ -0,0 +1,57 @@
|
||||
// import something here
|
||||
|
||||
// import { isEqual } from 'lodash'
|
||||
// import { ProgressBar } from '@src/store/Modules/Interface'
|
||||
// import { UserStore } from "@store"
|
||||
|
||||
// @ts-ignore
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default boot(({ app, router }) => {
|
||||
// ******************************************
|
||||
// *** Per non permettere di accedere alle pagine in cui è necessario essere Loggati ! ***
|
||||
// ******************************************
|
||||
|
||||
// Creates a `nextMiddleware()` function which not only
|
||||
// runs the default `next()` callback but also triggers
|
||||
// the subsequent Middleware function.
|
||||
|
||||
/* router.beforeEach((to, from, next) => {
|
||||
var accessToken = store.state.session.userSession.accessToken
|
||||
// ESTANDO LOGEADO
|
||||
if (accessToken) {
|
||||
// SE PERMITE IR DE AREA PUBLICA A PRIVADA
|
||||
if (!from.matched.some(record => record.meta.requiresAuth) && to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next()
|
||||
}
|
||||
// SE PERMITE IR DE UNA AREA PRIVADA A OTRA PRIVADA
|
||||
if (from.matched.some(record => record.meta.requiresAuth) && to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next()
|
||||
}
|
||||
// NO SE PERMITE IR A UN AREA PUBLICA DESDE UN AREA PRIVADA
|
||||
if (from.matched.some(record => record.meta.requiresAuth) && !to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next(false)
|
||||
}
|
||||
// SE REDIRIJE AL PANEL
|
||||
if (!from.matched.some(record => record.meta.requiresAuth) && !to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next('/Panel')
|
||||
}
|
||||
// NO ESTA LOGEADO
|
||||
} else {
|
||||
// SE PERMITE IR DE UNA AREA PUBLICA A OTRA PUBLICA
|
||||
if (!from.matched.some(record => record.meta.requiresAuth) && !to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next()
|
||||
}
|
||||
// SE PERMITE IR DE UNA AREA PRIVADA A UNA PUBLICA (LOGOUT)
|
||||
if (from.matched.some(record => record.meta.requiresAuth) && !to.matched.some(record => record.meta.requiresAuth)) {
|
||||
next()
|
||||
}
|
||||
// NO SE PERMITE IR DE UNA AREA PUBLICA A UNA PRIVADA
|
||||
if (!from.matched.some(record => record.meta.requiresAuth) && to.matched.some(record => record.meta.requiresAuth)) {
|
||||
// REDIRIGIR A LOGIN
|
||||
next('/')
|
||||
}
|
||||
}
|
||||
}) */
|
||||
|
||||
})
|
||||
33
src/boot/i18n.ts
Executable file
33
src/boot/i18n.ts
Executable file
@@ -0,0 +1,33 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import messages from '../statics/i18n'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
// you'll need to create the src/i18n/index.js file too
|
||||
|
||||
const i18n = createI18n({
|
||||
locale: 'it',
|
||||
messages,
|
||||
})
|
||||
|
||||
export default ({ app }: { app: any }) => {
|
||||
// Set i18n instance on app
|
||||
app.use(i18n)
|
||||
}
|
||||
|
||||
export function useI18n() {
|
||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||
const {
|
||||
t, te, tm, rt, d, n, ...globalApi
|
||||
} = i18n.global;
|
||||
|
||||
return {
|
||||
t: t.bind(i18n),
|
||||
te: te.bind(i18n),
|
||||
tm: tm.bind(i18n),
|
||||
rt: rt.bind(i18n),
|
||||
d: d.bind(i18n),
|
||||
n: n.bind(i18n),
|
||||
...globalApi,
|
||||
};
|
||||
}
|
||||
|
||||
export { i18n }
|
||||
8
src/boot/local-storage.ts
Executable file
8
src/boot/local-storage.ts
Executable file
@@ -0,0 +1,8 @@
|
||||
// import something here
|
||||
import { boot } from 'quasar/wrappers'
|
||||
import { _LocalStorage } from '../local-storage'
|
||||
// leave the export, even if you don't use it
|
||||
export default boot(({ app, router }) => {
|
||||
// something to do
|
||||
app.config.globalProperties.$_localStorage = _LocalStorage
|
||||
})
|
||||
5
src/boot/mycharts.ts.off
Executable file
5
src/boot/mycharts.ts.off
Executable file
@@ -0,0 +1,5 @@
|
||||
import Chartkick from 'vue-chartkick'
|
||||
|
||||
export default async ({ Vue }) => {
|
||||
Vue.use(Chartkick)
|
||||
}
|
||||
10
src/boot/myconfig.ts
Executable file
10
src/boot/myconfig.ts
Executable file
@@ -0,0 +1,10 @@
|
||||
// import something here
|
||||
import { boot } from 'quasar/wrappers'
|
||||
import myconfig from '../myconfig'
|
||||
|
||||
// leave the export, even if you don't use it
|
||||
export default boot(({ app }) => {
|
||||
// Vue.use(myconfig);
|
||||
// something to do
|
||||
app.config.globalProperties.$myconfig = myconfig
|
||||
})
|
||||
7
src/boot/mypao.ts
Normal file
7
src/boot/mypao.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
// "async" is optional;
|
||||
// more info on params: https://v2.quasar.dev/quasar-cli/boot-files
|
||||
export default boot(async ({ app, router }) => {
|
||||
// something to do
|
||||
})
|
||||
8
src/boot/track-disattivato-riutilizzare.ts.off
Executable file
8
src/boot/track-disattivato-riutilizzare.ts.off
Executable file
@@ -0,0 +1,8 @@
|
||||
// import something here
|
||||
import track from '../track'
|
||||
|
||||
// leave the export, even if you don't use it
|
||||
export default ({ app, router, store, Vue }) => {
|
||||
// something to do
|
||||
Vue.prototype.$track = track
|
||||
}
|
||||
7
src/boot/vee-validate.ts
Normal file
7
src/boot/vee-validate.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
// "async" is optional;
|
||||
// more info on params: https://v2.quasar.dev/quasar-cli/boot-files
|
||||
export default boot(async (/* { app, router, ... } */) => {
|
||||
// something to do
|
||||
})
|
||||
6
src/boot/vee-validate.ts.off
Executable file
6
src/boot/vee-validate.ts.off
Executable file
@@ -0,0 +1,6 @@
|
||||
import VeeValidate from 'vee-validate'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default boot(({ app }) => {
|
||||
app.use(VeeValidate, { inject: false })
|
||||
})
|
||||
34
src/boot/vue-i18n.ts.off
Executable file
34
src/boot/vue-i18n.ts.off
Executable file
@@ -0,0 +1,34 @@
|
||||
// src/boot/vue-i18n.js
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import { toolsext } from '@src/store/Modules/toolsext'
|
||||
import messages from '../statics/i18n'
|
||||
import { tools } from '../store/Modules/tools'
|
||||
import { createPinia } from 'pinia'
|
||||
|
||||
export default ({ app }: { app: any }) => {
|
||||
// Vue.config.lang = process.env.LANG_DEFAULT;
|
||||
|
||||
const pinia = createPinia()
|
||||
app.use(pinia)
|
||||
|
||||
let mylang = tools.getItemLS(toolsext.localStorage.lang)
|
||||
console.log(`LANG LocalStorage ${mylang}`)
|
||||
|
||||
if ((navigator)) {
|
||||
const mylangnav = navigator.language
|
||||
console.log(`LANG NAVIGATOR ${mylangnav}`)
|
||||
if (mylang === '') mylang = mylangnav
|
||||
}
|
||||
|
||||
mylang = toolsext.checkLangPassed(mylang)
|
||||
|
||||
app.config.globalProperties.lang = mylang
|
||||
|
||||
const i18n = createI18n({
|
||||
fallbackLocale: mylang,
|
||||
locale: 'en-US',
|
||||
messages,
|
||||
})
|
||||
|
||||
app.use(i18n)
|
||||
}
|
||||
7
src/boot/vue-idb.ts.off
Executable file
7
src/boot/vue-idb.ts.off
Executable file
@@ -0,0 +1,7 @@
|
||||
import VueIdb from 'vue-idb'
|
||||
import { boot } from "quasar/wrappers"
|
||||
|
||||
export default boot(({ app }) => {
|
||||
app.use(VueIdb)
|
||||
|
||||
})
|
||||
6
src/boot/vue-meta.ts.off
Executable file
6
src/boot/vue-meta.ts.off
Executable file
@@ -0,0 +1,6 @@
|
||||
import Component from 'vue-class-component'
|
||||
|
||||
// Register the meta hook
|
||||
Component.registerHooks([
|
||||
'meta'
|
||||
])
|
||||
7
src/boot/vuelidate.ts
Executable file
7
src/boot/vuelidate.ts
Executable file
@@ -0,0 +1,7 @@
|
||||
import Vuelidate from 'vuelidate'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
export default boot(({ app }) => {
|
||||
// @ts-ignore
|
||||
app.use(Vuelidate)
|
||||
})
|
||||
8
src/boot/vuetelinput.ts.off
Executable file
8
src/boot/vuetelinput.ts.off
Executable file
@@ -0,0 +1,8 @@
|
||||
import VueTelInput from 'vue-tel-input'
|
||||
import { boot } from "quasar/wrappers"
|
||||
|
||||
// "async" is optional
|
||||
export default boot(async ({ app }) => {
|
||||
// something to do
|
||||
app.use(VueTelInput)
|
||||
})
|
||||
41
src/classes/debounce.ts
Executable file
41
src/classes/debounce.ts
Executable file
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* A function that emits a side effect and does not return anything.
|
||||
*/
|
||||
export type Procedure = (...args: any[]) => void
|
||||
|
||||
export type Options = {
|
||||
isImmediate: boolean
|
||||
}
|
||||
|
||||
export function debounce<F extends Procedure>(
|
||||
func: F,
|
||||
waitMilliseconds: number = 50,
|
||||
options: Options = {
|
||||
isImmediate: false,
|
||||
},
|
||||
): F {
|
||||
let timeoutId: NodeJS.Timeout | undefined
|
||||
|
||||
return function retA(this: any, ...args: any[]) {
|
||||
const context = this
|
||||
|
||||
const doLater = function retB() {
|
||||
timeoutId = undefined
|
||||
if (!options.isImmediate) {
|
||||
func.apply(context, args)
|
||||
}
|
||||
}
|
||||
|
||||
const shouldCallNow = options.isImmediate && timeoutId === undefined
|
||||
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId)
|
||||
}
|
||||
|
||||
timeoutId = <any>setTimeout(doLater, waitMilliseconds)
|
||||
|
||||
if (shouldCallNow) {
|
||||
func.apply(context, args)
|
||||
}
|
||||
} as any
|
||||
}
|
||||
1
src/classes/index.ts
Executable file
1
src/classes/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
// export * from './DateController';
|
||||
69
src/common/axios.ts
Executable file
69
src/common/axios.ts
Executable file
@@ -0,0 +1,69 @@
|
||||
import axios, {
|
||||
AxiosError,
|
||||
AxiosRequestConfig,
|
||||
AxiosResponse,
|
||||
} from 'axios'
|
||||
|
||||
// import { default as VueRouter } from 'vue-router'
|
||||
import { serv_constants } from '@src/store/Modules/serv_constants'
|
||||
// import { TokenHelper } from "./token-helper";
|
||||
|
||||
let initialized: boolean = false
|
||||
|
||||
interface IRequestConfig extends AxiosRequestConfig {
|
||||
ignore: number[]
|
||||
}
|
||||
|
||||
function handle(status: number, exclude: number[]) {
|
||||
if (exclude.length === 0) return true
|
||||
return exclude.find(o => o === status) === undefined
|
||||
}
|
||||
|
||||
export function UseAxios(router: any) { // VueRouter
|
||||
if (!initialized) {
|
||||
// @ts-ignore
|
||||
axios.interceptors.request.use((config: IRequestConfig) => {
|
||||
if (!config.headers.Authorization) {
|
||||
// append authorization header
|
||||
/* ++Todo: disattivato per ora...
|
||||
let bearerToken = TokenHelper.getBearerToken()
|
||||
|
||||
if (bearerToken.Authorization)
|
||||
Object.assign(config.headers, bearerToken)
|
||||
*/
|
||||
}
|
||||
|
||||
// ensure axios does not follow redirects, so custom response interceptor below can push to app login page
|
||||
if (!config.maxRedirects || (config.maxRedirects === 5)) {
|
||||
config.maxRedirects = 0
|
||||
}
|
||||
|
||||
return config
|
||||
})
|
||||
|
||||
axios.interceptors.response.use(undefined, (config: AxiosError) => {
|
||||
// @ts-ignore
|
||||
const { response } = config
|
||||
const exclude = (<IRequestConfig>config.config).ignore || []
|
||||
|
||||
if (response) {
|
||||
if (response.status === 401 && handle(response.status, exclude)) {
|
||||
const location: string = response.headers.location || response.headers.Location
|
||||
|
||||
if (location) {
|
||||
const redirectTo = `/${location}`
|
||||
window.setTimeout(() => router.replace(redirectTo), 200)
|
||||
}
|
||||
}
|
||||
|
||||
if (response.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN && handle(response.status, exclude)) {
|
||||
window.setTimeout(() => router.replace('/forbidden'), 200)
|
||||
}
|
||||
}
|
||||
|
||||
return config
|
||||
})
|
||||
|
||||
initialized = true
|
||||
}
|
||||
}
|
||||
58
src/common/debounce.ts
Executable file
58
src/common/debounce.ts
Executable file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Returns a function, that, as long as it continues to be invoked, will not
|
||||
* be triggered. The function will be called after it stops being called for
|
||||
* N milliseconds. If `immediate` is passed, trigger the function on the
|
||||
* leading edge, instead of the trailing. The function also has a property 'clear'
|
||||
* that is a function which will clear the timer to prevent previously scheduled executions.
|
||||
*
|
||||
* @source underscore.js
|
||||
* @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
|
||||
* @param {Function} function to wrap
|
||||
* @param {Number} timeout in ms (`100`)
|
||||
* @param {Boolean} whether to execute at the beginning (`false`)
|
||||
* @api public
|
||||
*/
|
||||
|
||||
export function Debounce(func: Function, wait?: number, immediate?: boolean) {
|
||||
// @ts-ignore
|
||||
let timeout: any,
|
||||
args: any,
|
||||
context: any,
|
||||
timestamp: any,
|
||||
result: any
|
||||
if (wait == null) wait = 100
|
||||
|
||||
function later() {
|
||||
const last = Date.now() - timestamp
|
||||
|
||||
// @ts-ignore
|
||||
if (last < wait && last > 0) {
|
||||
// @ts-ignore
|
||||
timeout = setTimeout(later, wait - last)
|
||||
} else {
|
||||
timeout = null
|
||||
if (!immediate) {
|
||||
result = func.apply(context, args)
|
||||
context = args == null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return function a2() {
|
||||
// @ts-ignore
|
||||
context = this
|
||||
// @ts-ignore
|
||||
// args = arguments
|
||||
timestamp = Date.now()
|
||||
const callNow = immediate && !timeout
|
||||
if (!timeout) {
|
||||
timeout = setTimeout(later, wait)
|
||||
}
|
||||
if (callNow) {
|
||||
result = func.apply(context, args)
|
||||
context = args == null
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
5
src/common/index.ts
Executable file
5
src/common/index.ts
Executable file
@@ -0,0 +1,5 @@
|
||||
export * from './pattern'
|
||||
export * from './axios'
|
||||
export * from './debounce'
|
||||
export * from './message'
|
||||
export { default as GlobalConfig } from '../config'
|
||||
8
src/common/message.ts
Executable file
8
src/common/message.ts
Executable file
@@ -0,0 +1,8 @@
|
||||
export const PayloadMessageTypes = {
|
||||
error: 'Error',
|
||||
info: 'Info',
|
||||
failure: 'Failure',
|
||||
success: 'Success',
|
||||
warning: 'Warning',
|
||||
statusfound: 200,
|
||||
}
|
||||
20
src/common/pattern.ts
Executable file
20
src/common/pattern.ts
Executable file
@@ -0,0 +1,20 @@
|
||||
export class Patterns {
|
||||
/**
|
||||
* Alphanumeric, spaces and dashes allowed. Min 2 characters length.
|
||||
*/
|
||||
public static DisplayName: RegExp = /^[0-9a-zA-Z\s-]{2,}/i
|
||||
|
||||
/**
|
||||
* Same pattern used by JQuery userName validation
|
||||
*/
|
||||
public static Email: RegExp = /^((“[\w-\s]+”)|([\w-]+(?:\.[\w-]+)*)|(“[\w-\s]+”)([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}[0-9];{1,2})\]?$)/i
|
||||
|
||||
/**
|
||||
* 6 to 20 characters string with at least one digit, one upper case letter, one lower case letter and one special symbol
|
||||
*
|
||||
* public static Password: RegExp = /^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%!\-]).{6,20})/i
|
||||
*
|
||||
* 8 to 20 characters string with at least one digit, one upper case letter, one lower case letter and one special symbol
|
||||
*/
|
||||
public static Password: RegExp = /^((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,30})/i
|
||||
}
|
||||
117
src/common/shared_nodejs.js
Executable file
117
src/common/shared_nodejs.js
Executable file
@@ -0,0 +1,117 @@
|
||||
module.exports = {
|
||||
Accepted: {
|
||||
CHECK_READ_GUIDELINES: 1,
|
||||
CHECK_SEE_VIDEO_PRINCIPI: 2,
|
||||
},
|
||||
|
||||
ALL_SAW_AND_ACCEPTED: 3,
|
||||
// ---------------------
|
||||
|
||||
FILTER_EXTRALIST_NOT_REGISTERED: 1,
|
||||
FILTER_EXTRALIST_NOT_CONTACTED: 2,
|
||||
FILTER_EXTRALIST_WITH_NOTE: 4,
|
||||
FILTER_USER_NO_ZOOM: 8,
|
||||
FILTER_USER_NO_INVITANTE: 16,
|
||||
FILTER_USER_NO_TELEGRAM_ID: 32,
|
||||
FILTER_USER_CODICE_AUTH_TELEGRAM: 64,
|
||||
FILTER_USER_NO_EMAIL_VERIFICATA: 128,
|
||||
FILTER_USER_NO_DREAM: 256,
|
||||
FILTER_EXTRALIST_DELETED: 512,
|
||||
FILTER_USER_TELEGRAM_BLOCKED: 1024,
|
||||
FILTER_ATTIVI: 2048,
|
||||
FILTER_NASCOSTI: 4096,
|
||||
FILTER_NAVI_NON_PRESENTI: 8192,
|
||||
FILTER_QUALIFIED: 16384,
|
||||
FILTER_ASK_ZOOM_VISTO: 32768,
|
||||
FILTER_HOURS_MYLIST: 65536,
|
||||
FILTER_HOURS_ALL: 131072,
|
||||
FILTER_MISSING_PAYMENT: 262144,
|
||||
FILTER_TO_MAKE_MEMBERSHIP_CARD: 524288,
|
||||
FILTER_MEMBERSHIP_CARD_OK: 1048576,
|
||||
|
||||
REPORT_FILT_RESP: 1,
|
||||
REPORT_FILT_ATTIVITA: 2,
|
||||
|
||||
PaymentTypes: [
|
||||
'Nessuno',
|
||||
'Bonifico Bancario',
|
||||
'Paypal',
|
||||
'In Contanti alla CNM',
|
||||
],
|
||||
|
||||
CashType: {
|
||||
None: 0,
|
||||
Incoming: 1,
|
||||
Outcoming: 2,
|
||||
},
|
||||
|
||||
WalletFinalStatusType: {
|
||||
None: 0,
|
||||
InCommonCash: 1,
|
||||
InMyWallet: 2,
|
||||
},
|
||||
|
||||
Permissions: {
|
||||
Admin: 1,
|
||||
Manager: 2,
|
||||
Teacher: 4,
|
||||
Tutor: 8,
|
||||
Editor: 16,
|
||||
Zoomeri: 32,
|
||||
Department: 64,
|
||||
},
|
||||
|
||||
MessageOptions: {
|
||||
Notify_ByEmail: 2,
|
||||
Notify_ByPushNotification: 4,
|
||||
},
|
||||
|
||||
TypeMsg: {
|
||||
SEND_TO_ALL: 1,
|
||||
SEND_TO_SOCI: 2,
|
||||
SEND_TO_SOCIO_RESIDENTE: 3,
|
||||
SEND_TO_CONSIGLIO: 5,
|
||||
SEND_TO_NON_SOCI: 10,
|
||||
SEND_TO_PAOLO: 20,
|
||||
},
|
||||
|
||||
TypeMsg_Actions: {
|
||||
NORMAL: 0,
|
||||
YESNO: 1,
|
||||
OPZ1_2: 2,
|
||||
},
|
||||
|
||||
CallFunz: {
|
||||
SOSTITUISCI: 345,
|
||||
AGGIUNGI_NUOVO_IMBARCO: 380,
|
||||
CANCELLA_IMBARCO: 385,
|
||||
DAMMI_PRIMO_UTENTE_LIBERO: 390,
|
||||
GET_VALBYTABLE: 400,
|
||||
SET_VALBYTABLE: 410,
|
||||
ZOOM_GIA_PARTECIPATO: 510,
|
||||
},
|
||||
|
||||
OrderStatus: {
|
||||
NONE: 0,
|
||||
IN_CART: 1,
|
||||
CHECKOUT_SENT: 2,
|
||||
ORDER_CONFIRMED: 3,
|
||||
PAYED: 4,
|
||||
DELIVEDED: 5,
|
||||
RECEIVED: 6,
|
||||
CANCELED: 10,
|
||||
},
|
||||
|
||||
OrderStatusView: {
|
||||
CHECKOUT_SENT: 2,
|
||||
ORDER_CONFIRMED: 3,
|
||||
PAYED: 4,
|
||||
RECEIVED: 6,
|
||||
CANCELED: 10,
|
||||
},
|
||||
|
||||
fieldsUserToChange() {
|
||||
return ['_id', 'index', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'ipaddr', 'lasttimeonline', 'profile', 'calcstat', 'news_on', 'aportador_solidario', 'made_gift', 'ind_order', 'old_order', 'numinvitati', 'numinvitatiattivi', 'qualified']
|
||||
},
|
||||
|
||||
};
|
||||
225
src/common/shared_vuejs.ts
Executable file
225
src/common/shared_vuejs.ts
Executable file
@@ -0,0 +1,225 @@
|
||||
|
||||
export const shared_consts = {
|
||||
|
||||
Accepted: {
|
||||
CHECK_READ_GUIDELINES: {
|
||||
value: 1,
|
||||
label: 'steps.linee_guida',
|
||||
icon: 'fas fa-user-shield',
|
||||
color: 'red',
|
||||
},
|
||||
CHECK_SEE_VIDEO_PRINCIPI: {
|
||||
value: 2,
|
||||
label: 'steps.video_intro',
|
||||
icon: 'fas fa-tools',
|
||||
color: 'green',
|
||||
},
|
||||
},
|
||||
|
||||
ALL_SAW_AND_ACCEPTED: 3,
|
||||
|
||||
FILTER_EXTRALIST_NOT_REGISTERED: 1,
|
||||
FILTER_EXTRALIST_NOT_CONTACTED: 2,
|
||||
FILTER_EXTRALIST_WITH_NOTE: 4,
|
||||
FILTER_USER_NO_ZOOM: 8,
|
||||
FILTER_USER_NO_INVITANTE: 16,
|
||||
FILTER_USER_NO_TELEGRAM_ID: 32,
|
||||
FILTER_USER_CODICE_AUTH_TELEGRAM: 64,
|
||||
FILTER_USER_NO_EMAIL_VERIFICATA: 128,
|
||||
FILTER_USER_NO_DREAM: 256,
|
||||
FILTER_EXTRALIST_DELETED: 512,
|
||||
FILTER_USER_TELEGRAM_BLOCKED: 1024,
|
||||
FILTER_ATTIVI: 2048,
|
||||
FILTER_NASCOSTI: 4096,
|
||||
FILTER_NAVI_NON_PRESENTI: 8192,
|
||||
FILTER_QUALIFIED: 16384,
|
||||
FILTER_ASK_ZOOM_VISTO: 32768,
|
||||
FILTER_HOURS_MYLIST: 65536,
|
||||
FILTER_HOURS_ALL: 131072,
|
||||
FILTER_MISSING_PAYMENT: 262144,
|
||||
FILTER_TO_MAKE_MEMBERSHIP_CARD: 524288,
|
||||
FILTER_MEMBERSHIP_CARD_OK: 1048576,
|
||||
|
||||
REPORT_FILT_RESP: 1,
|
||||
REPORT_FILT_ATTIVITA: 2,
|
||||
|
||||
CashType: {
|
||||
None: 0,
|
||||
Incoming: 1,
|
||||
Outcoming: 2,
|
||||
},
|
||||
|
||||
Permissions: {
|
||||
Admin: {
|
||||
value: 1,
|
||||
label: 'pages.Admin',
|
||||
icon: 'fas fa-user-shield',
|
||||
color: 'red',
|
||||
},
|
||||
Manager: {
|
||||
value: 2,
|
||||
label: 'otherpages.manage.manager',
|
||||
icon: 'fas fa-tools',
|
||||
color: 'green',
|
||||
},
|
||||
Teacher: {
|
||||
value: 4,
|
||||
label: 'event.teacher',
|
||||
icon: 'fas fa-user-tie',
|
||||
color: 'blue',
|
||||
},
|
||||
Tutor: {
|
||||
value: 8,
|
||||
label: 'dashboard.tutor',
|
||||
icon: 'fas fa-user-tie',
|
||||
color: 'fuchsia',
|
||||
},
|
||||
Editor: {
|
||||
value: 16,
|
||||
label: 'dashboard.Editor',
|
||||
icon: 'fas fa-user-tie',
|
||||
color: 'orange',
|
||||
},
|
||||
Zoomeri: {
|
||||
value: 32,
|
||||
label: 'dashboard.zoomeri',
|
||||
icon: 'fas fa-user-tie',
|
||||
color: 'yellow',
|
||||
},
|
||||
Department: {
|
||||
value: 64,
|
||||
label: 'pages.department',
|
||||
icon: 'fas fa-user-tie',
|
||||
color: 'yellow',
|
||||
},
|
||||
},
|
||||
|
||||
MessageOptions: {
|
||||
Notify_ByEmail: 2,
|
||||
Notify_ByPushNotification: 4,
|
||||
},
|
||||
|
||||
TypeMsg: {
|
||||
SEND_TO_ALL: 1,
|
||||
SEND_TO_SOCI: 2,
|
||||
SEND_TO_SOCIO_RESIDENTE: 3,
|
||||
SEND_TO_NON_SOCI: 10,
|
||||
SEND_TO_PAOLO: 20,
|
||||
},
|
||||
|
||||
TypeMsg_Actions: {
|
||||
NORMAL: 0,
|
||||
YESNO: 1,
|
||||
OPZ1_2: 2,
|
||||
},
|
||||
|
||||
selectActions: [
|
||||
{
|
||||
id: 0,
|
||||
label: 'Normale',
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
label: 'Si / No',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
label: 'Opzione 1 / Opzione 2',
|
||||
value: 2,
|
||||
},
|
||||
],
|
||||
|
||||
selectDestination: [
|
||||
{
|
||||
id: 0,
|
||||
label: 'A Tutti',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
label: 'Solo ai Soci',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
label: 'Solo ai Soci Residenti',
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
label: 'Solo ai NON Soci',
|
||||
value: 10,
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
label: 'a Paolo (test)',
|
||||
value: 20,
|
||||
},
|
||||
],
|
||||
|
||||
OrderStatus: {
|
||||
NONE: 0,
|
||||
IN_CART: 1,
|
||||
CHECKOUT_SENT: 2,
|
||||
ORDER_CONFIRMED: 3,
|
||||
PAYED: 4,
|
||||
DELIVEDED: 5,
|
||||
RECEIVED: 6,
|
||||
CANCELED: 10,
|
||||
},
|
||||
|
||||
OrderStatusView: [
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
6,
|
||||
10,
|
||||
],
|
||||
|
||||
OrderStatusStr: [
|
||||
{
|
||||
label: 'Nessuno',
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
label: 'In Carrello',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: 'Ordine in Lavorazione',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: 'Ordine Confermato',
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
label: 'Pagato',
|
||||
value: 4,
|
||||
},
|
||||
{
|
||||
label: 'Spedito',
|
||||
value: 5,
|
||||
},
|
||||
{
|
||||
label: 'Ricevuto',
|
||||
value: 6,
|
||||
},
|
||||
{
|
||||
label: 'Cancellato',
|
||||
value: 10,
|
||||
},
|
||||
],
|
||||
|
||||
getStatusStr(status: number) {
|
||||
const trovatorec = this.OrderStatusStr.find((rec) => rec.value === status)
|
||||
return (trovatorec) ? trovatorec.label : ''
|
||||
},
|
||||
|
||||
fieldsUserToChange() {
|
||||
return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on']
|
||||
},
|
||||
|
||||
}
|
||||
4
src/components/.directory
Executable file
4
src/components/.directory
Executable file
@@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2019,10,10,16,45,34
|
||||
Version=4
|
||||
ViewMode=1
|
||||
34
src/components/BannerCookies/BannerCookies.scss
Executable file
34
src/components/BannerCookies/BannerCookies.scss
Executable file
@@ -0,0 +1,34 @@
|
||||
// Animations
|
||||
// slideFromBottom
|
||||
.slideFromBottom-enter, .slideFromBottom-leave-to {
|
||||
transform: translate(0px, 10em);
|
||||
}
|
||||
|
||||
.slideFromBottom-enter-to, .slideFromBottom-leave {
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
.slideFromBottom-enter-active {
|
||||
transition: transform .2s ease-out;
|
||||
}
|
||||
|
||||
.slideFromBottom-leave-active {
|
||||
transition: transform .2s ease-in;
|
||||
}
|
||||
|
||||
.tothebottomfixed {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 60px;
|
||||
bottom: 0;
|
||||
height: -100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.margin_buttons_cook {
|
||||
margin: -8px -8px;
|
||||
}
|
||||
|
||||
.margin_buttons_cook > * {
|
||||
margin: 8px 8px !important;
|
||||
}
|
||||
141
src/components/BannerCookies/BannerCookies.ts
Executable file
141
src/components/BannerCookies/BannerCookies.ts
Executable file
@@ -0,0 +1,141 @@
|
||||
import { useQuasar } from 'quasar'
|
||||
import {
|
||||
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRefs, watch,
|
||||
} from 'vue'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
|
||||
// PropType,
|
||||
|
||||
export default defineComponent({
|
||||
name: 'BannerCookies',
|
||||
components: {},
|
||||
props: {
|
||||
urlInfo: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
|
||||
setup(props, context) {
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n();
|
||||
|
||||
const elementId = ref<string>('id');
|
||||
const disableDecline = ref<boolean>(true);
|
||||
const debug = ref<boolean>(false);
|
||||
const status = ref<string | null>(null);
|
||||
const supportsLocalStorage = ref<boolean>(true);
|
||||
const isOpen = ref<boolean>(false);
|
||||
|
||||
const getCookieStatus = (): string | null => {
|
||||
if (supportsLocalStorage.value) {
|
||||
return localStorage.getItem(`cookie-${elementId.value}`)
|
||||
}
|
||||
return null
|
||||
// return tinyCookie.get(`cookie-${this.elementId}`)
|
||||
}
|
||||
|
||||
const init = (): void => {
|
||||
const visitedType = getCookieStatus()
|
||||
if (visitedType && (visitedType === 'accept' || visitedType === 'decline' || visitedType === 'postpone')) {
|
||||
isOpen.value = false
|
||||
}
|
||||
|
||||
if (!visitedType) {
|
||||
isOpen.value = true
|
||||
}
|
||||
if (!supportsLocalStorage.value) isOpen.value = false
|
||||
|
||||
status.value = visitedType
|
||||
context.emit('status', visitedType)
|
||||
}
|
||||
|
||||
const checkLocalStorageFunctionality = (): void => {
|
||||
// Check for availability of localStorage
|
||||
try {
|
||||
const test = '__cookie-check-localStorage'
|
||||
window.localStorage.setItem(test, test)
|
||||
window.localStorage.removeItem(test)
|
||||
} catch (e) {
|
||||
console.error('Local storage is not supported, falling back to cookie use')
|
||||
supportsLocalStorage.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const setCookieStatus = (type: string): void => {
|
||||
if (supportsLocalStorage.value) {
|
||||
if (type === 'accept') {
|
||||
localStorage.setItem(`cookie-${elementId.value}`, 'accept')
|
||||
}
|
||||
if (type === 'decline') {
|
||||
localStorage.setItem(`cookie-${elementId.value}`, 'decline')
|
||||
}
|
||||
if (type === 'postpone') {
|
||||
localStorage.setItem(`cookie-${elementId.value}`, 'postpone')
|
||||
}
|
||||
} else {
|
||||
/* if (type === 'accept') {
|
||||
tinyCookie.set(`cookie-${elementId}`, 'accept')
|
||||
}
|
||||
if (type === 'decline') {
|
||||
tinyCookie.set(`cookie-${elementId}`, 'decline')
|
||||
}
|
||||
if (type === 'postpone') {
|
||||
tinyCookie.set(`cookie-${elementId}`, 'postpone')
|
||||
} */
|
||||
}
|
||||
}
|
||||
|
||||
const accept = (): void => {
|
||||
if (!debug.value) {
|
||||
setCookieStatus('accept')
|
||||
}
|
||||
|
||||
status.value = 'accept'
|
||||
isOpen.value = false
|
||||
context.emit('clicked-accept')
|
||||
}
|
||||
|
||||
const decline = (): void => {
|
||||
if (!debug.value) {
|
||||
setCookieStatus('decline')
|
||||
}
|
||||
|
||||
status.value = 'decline'
|
||||
isOpen.value = false
|
||||
context.emit('clicked-decline')
|
||||
}
|
||||
|
||||
const clickInfo = (): void => {
|
||||
isOpen.value = false
|
||||
}
|
||||
const postpone = (): void => {
|
||||
if (!debug.value) {
|
||||
setCookieStatus('postpone')
|
||||
}
|
||||
|
||||
status.value = 'postpone'
|
||||
isOpen.value = false
|
||||
context.emit('clicked-postpone')
|
||||
}
|
||||
const removeCookie = (): void => {
|
||||
localStorage.removeItem(`cookie-${elementId.value}`)
|
||||
status.value = null
|
||||
context.emit('removed-cookie')
|
||||
}
|
||||
|
||||
onMounted(init)
|
||||
|
||||
return {
|
||||
disableDecline,
|
||||
decline,
|
||||
accept,
|
||||
postpone,
|
||||
checkLocalStorageFunctionality,
|
||||
clickInfo,
|
||||
removeCookie,
|
||||
isOpen,
|
||||
t,
|
||||
}
|
||||
},
|
||||
})
|
||||
27
src/components/BannerCookies/BannerCookies.vue
Executable file
27
src/components/BannerCookies/BannerCookies.vue
Executable file
@@ -0,0 +1,27 @@
|
||||
<template>
|
||||
<div v-if="isOpen" class="tothebottomfixed" role="dialog">
|
||||
<div class="q-pa-md q-gutter-sm">
|
||||
<transition appear name="slide-up" mode="out-in" :duration="2000">
|
||||
<q-banner class="bg-primary text-white" transition-show="jump-down">
|
||||
{{t('cookies')}}
|
||||
<template v-slot:action>
|
||||
<div class="row justify-center margin_buttons_cook q-gutter-lg text-center" >
|
||||
<q-btn
|
||||
v-if="disableDecline === false" flat color="white" label="Declina"
|
||||
@click="decline"></q-btn>
|
||||
<q-btn flat color="white" label="INFO" type="a" :href="urlInfo" @click="clickInfo"></q-btn>
|
||||
<q-btn flat color="white" label="OK" @click="accept"></q-btn>
|
||||
</div>
|
||||
</template>
|
||||
</q-banner>
|
||||
</transition>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./BannerCookies.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './BannerCookies.scss';
|
||||
</style>
|
||||
1
src/components/BannerCookies/index.ts
Executable file
1
src/components/BannerCookies/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as BannerCookies } from './BannerCookies.vue'
|
||||
56
src/components/CImgText/CImgText.scss
Executable file
56
src/components/CImgText/CImgText.scss
Executable file
@@ -0,0 +1,56 @@
|
||||
|
||||
.imgtext {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
/* flex-flow: row nowrap; */
|
||||
|
||||
padding: 1rem 0 1rem 0;
|
||||
margin: .125rem;
|
||||
|
||||
* {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
&__img {
|
||||
min-width: 250px;
|
||||
}
|
||||
&__imgh100 {
|
||||
max-height: 100px;
|
||||
}
|
||||
&__imgh150 {
|
||||
max-height: 150px;
|
||||
}
|
||||
&__imgw150 {
|
||||
max-width: 150px;
|
||||
}
|
||||
&__imgw100 {
|
||||
max-width: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 400px) {
|
||||
|
||||
// PER VERSIONE MOBILE
|
||||
.landing > section.padding_testo {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.1rem;
|
||||
}
|
||||
|
||||
.imgtext {
|
||||
padding: 0.25rem 0 0.25rem 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.landing > section.padding_testo {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.section_text {
|
||||
padding: 10px;
|
||||
}
|
||||
53
src/components/CImgText/CImgText.ts
Executable file
53
src/components/CImgText/CImgText.ts
Executable file
@@ -0,0 +1,53 @@
|
||||
import {
|
||||
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch,
|
||||
} from 'vue'
|
||||
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CImgText',
|
||||
props: {
|
||||
src: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
src2: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
class1: {
|
||||
type: String,
|
||||
default: 'myclimg',
|
||||
},
|
||||
style1: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
alt1: {
|
||||
type: String,
|
||||
default: 'image',
|
||||
},
|
||||
alt2: {
|
||||
type: String,
|
||||
default: 'image',
|
||||
},
|
||||
},
|
||||
|
||||
setup() {
|
||||
function clrowcol() {
|
||||
let mycl = 'row'
|
||||
if (tools.isMobile()) mycl = 'column'
|
||||
|
||||
return mycl
|
||||
}
|
||||
|
||||
function myclass() {
|
||||
return `${clrowcol()} items-start q-col-gutter-xs imgtext `
|
||||
}
|
||||
|
||||
return {
|
||||
clrowcol,
|
||||
myclass,
|
||||
}
|
||||
},
|
||||
})
|
||||
21
src/components/CImgText/CImgText.vue
Executable file
21
src/components/CImgText/CImgText.vue
Executable file
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<div>
|
||||
<section class="padding_testo bg-white text-grey-10 text-justify"> <!-- v-scroll-reveal.reset -->
|
||||
<div :class="myclass">
|
||||
<div :class="clrowcol + ` q-px-xs`">
|
||||
<q-img v-if="src" :src="src" class="" :style="style1" :alt="alt1"></q-img>
|
||||
<q-img v-if="src2" :src="src2" class="" :style="style1" :alt="alt2"></q-img>
|
||||
<div class="section_text">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CImgText.ts">
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import './CImgText.scss';
|
||||
</style>
|
||||
1
src/components/CImgText/index.ts
Executable file
1
src/components/CImgText/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as CImgText } from './CImgText.vue'
|
||||
90
src/components/CImgTitle/CImgTitle.scss
Executable file
90
src/components/CImgTitle/CImgTitle.scss
Executable file
@@ -0,0 +1,90 @@
|
||||
|
||||
.imgtitle {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
/* flex-flow: row nowrap; */
|
||||
|
||||
padding: 1rem 0 1rem 0;
|
||||
margin: .125rem;
|
||||
|
||||
* {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
&__img {
|
||||
min-width: 250px;
|
||||
}
|
||||
&__imgh100 {
|
||||
max-height: 100px;
|
||||
}
|
||||
&__imgh150 {
|
||||
max-height: 150px;
|
||||
}
|
||||
&__imgw150 {
|
||||
max-width: 150px;
|
||||
}
|
||||
&__imgw100 {
|
||||
max-width: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 718px) {
|
||||
// PER VERSIONE MOBILE
|
||||
.landing > section.padding_testo {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.1rem;
|
||||
}
|
||||
|
||||
.imgtitle {
|
||||
padding: 0.25rem 0 0.25rem 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.landing > section.padding_testo {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.section_text {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.title{
|
||||
font-size: 3rem;
|
||||
padding: 10px;
|
||||
text-shadow: .2rem .2rem .2rem #3d3d3d;
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.title{
|
||||
padding: 5px;
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.mylegendinside{
|
||||
font-size: 1rem;
|
||||
margin-bottom: 50px;
|
||||
opacity: .8;
|
||||
|
||||
@media (max-width: 400px) {
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
.mylegend{
|
||||
text-align: center;
|
||||
color: black;
|
||||
font-size: 1rem;
|
||||
font-style: italic;
|
||||
opacity: .8;
|
||||
text-shadow: .05rem .05rem .05rem #aeaeae;
|
||||
z-index: 1000;
|
||||
@media (max-width: 400px) {
|
||||
}
|
||||
}
|
||||
58
src/components/CImgTitle/CImgTitle.ts
Executable file
58
src/components/CImgTitle/CImgTitle.ts
Executable file
@@ -0,0 +1,58 @@
|
||||
import { defineComponent, ref } from 'vue'
|
||||
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CImgTitle',
|
||||
props: {
|
||||
src: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
myheight: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0,
|
||||
},
|
||||
myheightmobile: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: 0,
|
||||
},
|
||||
legendinside: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
legend: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
function getsrc(): string {
|
||||
const filefull = tools.getimgFullpathbysize(props.src)
|
||||
|
||||
return tools.getimgbysize(filefull.path, filefull.file)
|
||||
}
|
||||
|
||||
function getaltimg(): string {
|
||||
const filefull = tools.getimgFullpathbysize(props.src)
|
||||
return tools.getaltimg(filefull.path, filefull.file, props.title)
|
||||
}
|
||||
|
||||
return {
|
||||
getsrc,
|
||||
getaltimg,
|
||||
}
|
||||
},
|
||||
|
||||
})
|
||||
15
src/components/CImgTitle/CImgTitle.vue
Executable file
15
src/components/CImgTitle/CImgTitle.vue
Executable file
@@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<div>
|
||||
<q-parallax :src="getsrc" :height="tools.myheight_imgtitle(myheight, myheightmobile)">
|
||||
<h1 class="text-white title" style="text-align: center" >{{title}}</h1>
|
||||
<div v-if="legendinside" class="mylegendinside absolute-bottom custom-caption" style="text-align: center" v-html="legendinside"></div>
|
||||
</q-parallax>
|
||||
<div v-if="legend" class="mylegend" v-html="legend"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CImgTitle.ts">
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import './CImgTitle.scss';
|
||||
</style>
|
||||
1
src/components/CImgTitle/index.ts
Executable file
1
src/components/CImgTitle/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as CImgTitle } from './CImgTitle.vue'
|
||||
0
src/components/CMyPage/CMyPage.scss
Executable file
0
src/components/CMyPage/CMyPage.scss
Executable file
67
src/components/CMyPage/CMyPage.ts
Executable file
67
src/components/CMyPage/CMyPage.ts
Executable file
@@ -0,0 +1,67 @@
|
||||
import {
|
||||
defineComponent, onMounted, ref, toRef,
|
||||
} from 'vue'
|
||||
|
||||
import { IMyPage } from '@src/model'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { Footer } from '../Footer'
|
||||
|
||||
import { CImgTitle } from '../CImgTitle/index'
|
||||
import { CTitle } from '../CTitle/index'
|
||||
import MixinsMetaTags from '../../mixins/mixin-metatags'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CMyPage',
|
||||
components: { Footer, CImgTitle, CTitle },
|
||||
mixins: [MixinsMetaTags],
|
||||
props: {
|
||||
title: String,
|
||||
mypath: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
img: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
imgbackground: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
sizes: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
styleadd: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
nofooter: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
const $q = useQuasar()
|
||||
const rec = ref<IMyPage | null>(null)
|
||||
const mypath = toRef(props, 'mypath')
|
||||
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
const load = async (): Promise<void> => {
|
||||
if (mypath.value !== '') rec.value = await globalStore.loadPage(mypath.value)
|
||||
}
|
||||
onMounted(load)
|
||||
|
||||
return { rec }
|
||||
},
|
||||
|
||||
})
|
||||
53
src/components/CMyPage/CMyPage.vue
Executable file
53
src/components/CMyPage/CMyPage.vue
Executable file
@@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="mypath && !!rec">
|
||||
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||
<div v-if="!!rec.img1" class="text-center">
|
||||
<q-img :src="`public/`+ rec.img1" class="img"></q-img>
|
||||
</div>
|
||||
|
||||
<div v-if="!!rec.content" v-html="rec.content"></div>
|
||||
<q-video v-if="!!rec.video1" :src="rec.video1" :ratio="rec.ratio1">
|
||||
</q-video>
|
||||
|
||||
<div v-if="!!rec.img2" class="text-center">
|
||||
<q-img :src="`public/`+ rec.img2" class="img"></q-img>
|
||||
</div>
|
||||
|
||||
<div v-if="!!rec.content2" v-html="rec.content2"></div>
|
||||
<q-video v-if="!!rec.video2" :src="rec.video2" :ratio="rec.ratio2"></q-video>
|
||||
|
||||
<div v-if="!!rec.img3" class="text-center">
|
||||
<q-img :src="`public/`+ rec.img2" class="img"></q-img>
|
||||
</div>
|
||||
|
||||
<div v-if="!!rec.content3" v-html="rec.content3"></div>
|
||||
<q-video v-if="!!rec.video3" :src="rec.video3" :ratio="rec.ratio3"></q-video>
|
||||
<div v-if="!!rec.content4" v-html="rec.content4"></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else>
|
||||
<div v-if="!!title">
|
||||
<CTitle
|
||||
v-if="imgbackground" :imgbackground="imgbackground"
|
||||
:headtitle="title" :sizes="sizes" :styleadd="styleadd"></CTitle>
|
||||
<div v-if="!imgbackground">
|
||||
<CImgTitle v-if="img" :src="img" :title="title">
|
||||
</CImgTitle>
|
||||
</div>
|
||||
<slot></slot>
|
||||
<div v-if="!nofooter">
|
||||
<Footer></Footer>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CMyPage.ts">
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import './CMyPage.scss';
|
||||
</style>
|
||||
1
src/components/CMyPage/index.ts
Executable file
1
src/components/CMyPage/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as CMyPage } from './CMyPage.vue'
|
||||
29
src/components/CTitle/CTitle.scss
Executable file
29
src/components/CTitle/CTitle.scss
Executable file
@@ -0,0 +1,29 @@
|
||||
|
||||
.cltitlebg{
|
||||
|
||||
}
|
||||
|
||||
.titletext {
|
||||
color: white;
|
||||
font-size: 3rem;
|
||||
font-weight: 500;
|
||||
line-height: 3rem;
|
||||
text-shadow: .25rem .25rem .5rem black;
|
||||
letter-spacing: .00937em;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
@media (max-width: 718px) {
|
||||
// PER VERSIONE MOBILE
|
||||
.titletext {
|
||||
color: white;
|
||||
font-size: 2rem;
|
||||
font-weight: 500;
|
||||
line-height: 2rem;
|
||||
text-shadow: .25rem .25rem .5rem black;
|
||||
}
|
||||
}
|
||||
|
||||
.q-img__content > div{
|
||||
background: rgba(0,0,0,0.17) !important;
|
||||
}
|
||||
56
src/components/CTitle/CTitle.ts
Executable file
56
src/components/CTitle/CTitle.ts
Executable file
@@ -0,0 +1,56 @@
|
||||
import {
|
||||
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch,
|
||||
} from 'vue'
|
||||
|
||||
import { tools } from '@store/Modules/tools'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CTitle',
|
||||
props: {
|
||||
headtitle: {
|
||||
type: String,
|
||||
required: true,
|
||||
default: '',
|
||||
},
|
||||
imgbackground: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
imghead: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
sizes: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
styleadd: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
setup(props, { attrs, slots, emit }) {
|
||||
const { headtitle } = toRefs(props) // REQUIRED PROP !
|
||||
const imgbackground = toRef(props, 'imgbackground') // OPTIONAL PROP
|
||||
|
||||
function getsrc(): string {
|
||||
const filefull = tools.getimgFullpathbysize(imgbackground.value)
|
||||
|
||||
return tools.getimgbysize(filefull.path, filefull.file)
|
||||
}
|
||||
|
||||
function getaltimg(): string {
|
||||
if (headtitle.value) {
|
||||
return headtitle.value
|
||||
}
|
||||
const filefull = tools.getimgFullpathbysize(imgbackground.value)
|
||||
return tools.getaltimg(filefull.path, filefull.file, headtitle.value)
|
||||
}
|
||||
|
||||
return {
|
||||
getsrc,
|
||||
getaltimg,
|
||||
}
|
||||
},
|
||||
})
|
||||
28
src/components/CTitle/CTitle.vue
Executable file
28
src/components/CTitle/CTitle.vue
Executable file
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<div>
|
||||
<q-img
|
||||
v-if="imgbackground" :src="getsrc" :alt="getaltimg"
|
||||
:style="tools.styles_imgtitle(sizes)">
|
||||
|
||||
<div class="absolute-bottom text-body1 text-center" :style="styleadd">
|
||||
<h1 class="titletext" v-html="headtitle"></h1>
|
||||
</div>
|
||||
</q-img>
|
||||
|
||||
<!--
|
||||
<q-parallax :height="tools.myheight_imgtitle()" :width="tools.mywidth_imgtitle()">
|
||||
<template v-slot:media>
|
||||
<img :src="imgbackground" class="cltitlebg">
|
||||
</template>
|
||||
<h2 class="titletext">{{headtitle}}</h2>
|
||||
</q-parallax>
|
||||
-->
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CTitle.ts">
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import './CTitle.scss';
|
||||
</style>
|
||||
1
src/components/CTitle/index.ts
Executable file
1
src/components/CTitle/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as CTitle } from './CTitle.vue'
|
||||
40
src/components/ClassComponent.vue
Executable file
40
src/components/ClassComponent.vue
Executable file
@@ -0,0 +1,40 @@
|
||||
<template>
|
||||
<div>
|
||||
<p>{{ title }}</p>
|
||||
<ul>
|
||||
<li v-for="todo in todos" :key="todo.id" @click="increment">
|
||||
{{ todo.id }} - {{ todo.content }}
|
||||
</li>
|
||||
</ul>
|
||||
<p>Count: {{ todoCount }} / {{ meta.totalCount }}</p>
|
||||
<p>Active: {{ active ? 'yes' : 'no' }}</p>
|
||||
<p>Clicks on todos: {{ clickCount }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Vue, prop } from 'vue-class-component'
|
||||
import { Todo, Meta } from './models'
|
||||
|
||||
class Props {
|
||||
readonly title!: string;
|
||||
|
||||
readonly todos = prop<Todo[]>({ default: () => [] });
|
||||
|
||||
readonly meta!: Meta;
|
||||
|
||||
readonly active!: boolean;
|
||||
}
|
||||
|
||||
export default class ClassComponent extends Vue.with(Props) {
|
||||
clickCount = 0;
|
||||
|
||||
increment() {
|
||||
this.clickCount += 1
|
||||
}
|
||||
|
||||
get todoCount() {
|
||||
return this.todos.length
|
||||
}
|
||||
}
|
||||
</script>
|
||||
39
src/components/EssentialLink.vue
Executable file
39
src/components/EssentialLink.vue
Executable file
@@ -0,0 +1,39 @@
|
||||
<template>
|
||||
<q-item
|
||||
clickable
|
||||
tag="a"
|
||||
target="_blank"
|
||||
:href="link"
|
||||
>
|
||||
<q-item-section
|
||||
v-if="icon"
|
||||
avatar
|
||||
>
|
||||
<q-icon :name="icon" />
|
||||
</q-item-section>
|
||||
c
|
||||
<q-item-section>
|
||||
<q-item-label>{{ title }}</q-item-label>
|
||||
<q-item-label caption>
|
||||
{{ caption }}
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Vue, prop, Options } from 'vue-class-component'
|
||||
|
||||
class Props {
|
||||
readonly title!: string;
|
||||
|
||||
readonly caption = prop({ default: '' });
|
||||
|
||||
readonly link = prop({ default: '#' });
|
||||
|
||||
readonly icon = prop({ default: '' });
|
||||
}
|
||||
|
||||
@Options({})
|
||||
export default class EssentialLink extends Vue.with(Props) {}
|
||||
</script>
|
||||
188
src/components/Footer/Footer.scss
Executable file
188
src/components/Footer/Footer.scss
Executable file
@@ -0,0 +1,188 @@
|
||||
$grayshadow: #555;
|
||||
|
||||
$textcol: blue;
|
||||
$textcol_scuro: darkblue;
|
||||
|
||||
|
||||
.landing__footer {
|
||||
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
|
||||
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
|
||||
padding-top: 4.5rem !important;
|
||||
padding-bottom: 4.5rem !important;
|
||||
padding-left: 1.25rem;
|
||||
padding-right: 1.25rem;
|
||||
color: #9f9f9f;
|
||||
}
|
||||
|
||||
.icon_contact:hover {
|
||||
color: blue;
|
||||
border-color: white;
|
||||
border-width: .0625rem;
|
||||
}
|
||||
|
||||
.landing__footer .doc-link {
|
||||
color: $textcol;
|
||||
}
|
||||
|
||||
.landing__footer .doc-link:hover {
|
||||
opacity: .8
|
||||
}
|
||||
|
||||
.landing__swirl-bg {
|
||||
background-repeat: no-repeat !important;
|
||||
background-position: top;
|
||||
background-size: contain !important;
|
||||
background-image: url(../../../public/images/landing_first_section.png) !important
|
||||
}
|
||||
|
||||
|
||||
.landing__footer-icons {
|
||||
font-size: 2rem
|
||||
}
|
||||
|
||||
.landing__footer-icons a {
|
||||
margin: 0 .5rem .5rem;
|
||||
text-decoration: none;
|
||||
outline: 0;
|
||||
color: $textcol;
|
||||
transition: color .28s
|
||||
}
|
||||
|
||||
.landing__footer-icons a:hover {
|
||||
color: $textcol_scuro;
|
||||
}
|
||||
|
||||
.doc-img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.mylist {
|
||||
background: #3fdaff;
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
|
||||
.clgutter {
|
||||
margin-top: 1.25rem;
|
||||
padding: .62rem;
|
||||
}
|
||||
|
||||
.carousel_img_3 {
|
||||
//background-image: url(../../public/images/cibo_sano.jpg);
|
||||
background-size: cover !important;
|
||||
background-position: 50% center !important;
|
||||
background-repeat: no-repeat !important;
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 718px) {
|
||||
// PER VERSIONE MOBILE
|
||||
|
||||
.landing__hero {
|
||||
text-align: center
|
||||
}
|
||||
.landing__header {
|
||||
height: 7vh
|
||||
}
|
||||
.clgutter {
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.landing__hero .text-h1 {
|
||||
font-size: 3rem;
|
||||
line-height: 3.05rem;
|
||||
margin-bottom: 1.5rem
|
||||
}
|
||||
|
||||
.landing > section.padding {
|
||||
padding: 2.5rem 1rem;
|
||||
}
|
||||
|
||||
.landing > section.padding_testo {
|
||||
padding-top: 1.25rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.landing > section.padding_gallery {
|
||||
padding-top: 3.125rem;
|
||||
padding-bottom: 5.625rem;
|
||||
}
|
||||
|
||||
.landing__features h4, .landing__features h6 {
|
||||
margin: 1.25rem 0
|
||||
}
|
||||
|
||||
h4 {
|
||||
line-height: 1.4;
|
||||
text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
|
||||
}
|
||||
|
||||
.landing .feature-item {
|
||||
text-align: center;
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
.landing__hero-content {
|
||||
padding-bottom: 11.25rem;
|
||||
}
|
||||
.landing__hero-btns {
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center
|
||||
}
|
||||
|
||||
.q-col-gutter-sm {
|
||||
padding: .625rem .315rem;
|
||||
}
|
||||
|
||||
.text-vers{
|
||||
font-size: 0.6rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.custom-caption {
|
||||
text-align: center;
|
||||
padding: .75rem;
|
||||
color: $textcol;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.mycontacts {
|
||||
color: gray;
|
||||
letter-spacing: 0.078rem;
|
||||
}
|
||||
|
||||
.copyrights {
|
||||
color: gray;
|
||||
letter-spacing: 0.078rem;
|
||||
}
|
||||
|
||||
.mycontacts_title {
|
||||
text-shadow: 0.125rem 0.125rem 0.125rem #555;
|
||||
font-weight: bold;
|
||||
color: #999;
|
||||
letter-spacing: 0.125rem;
|
||||
}
|
||||
|
||||
.mycontacts_text {
|
||||
font-size: 1rem;
|
||||
color: #999;
|
||||
letter-spacing: normal !important;
|
||||
}
|
||||
|
||||
.footer_link {
|
||||
font-size: 1rem;
|
||||
color:gray;
|
||||
}
|
||||
|
||||
.footer_link:hover {
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
||||
.margin_buttons_footer {
|
||||
margin: -4px -4px;
|
||||
}
|
||||
|
||||
.margin_buttons_footer > * {
|
||||
margin: 4px 8px;
|
||||
}
|
||||
69
src/components/Footer/Footer.ts
Executable file
69
src/components/Footer/Footer.ts
Executable file
@@ -0,0 +1,69 @@
|
||||
import {
|
||||
defineComponent,
|
||||
} from 'vue'
|
||||
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import { static_data } from '@src/db/static_data'
|
||||
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { FormNewsletter } from '../FormNewsletter'
|
||||
import { MixinBase } from '../../mixins/mixin-base'
|
||||
import { Logo } from '../logo'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Footer',
|
||||
mixins: [MixinBase],
|
||||
components: { Logo, FormNewsletter },
|
||||
|
||||
setup() {
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
console.log('Footer - INIT')
|
||||
|
||||
function TelegramSupport() {
|
||||
return globalStore.getValueSettingsByKey('TELEGRAM_SUPPORT', false)
|
||||
}
|
||||
|
||||
function Whatsapp_Cell() {
|
||||
return globalStore.getValueSettingsByKey('WHATSAPP_CELL', false)
|
||||
}
|
||||
|
||||
function Telegram_UsernameHttp() {
|
||||
return tools.getHttpForTelegram(globalStore.getValueSettingsByKey('TELEGRAM_USERNAME', false))
|
||||
}
|
||||
|
||||
function FBPage() {
|
||||
const fb = globalStore.getValueSettingsByKey('URL_FACEBOOK', false)
|
||||
return fb
|
||||
}
|
||||
|
||||
function InstagramPage() {
|
||||
return globalStore.getValueSettingsByKey('URL_INSTAGRAM', false)
|
||||
}
|
||||
|
||||
function TwitterPage() {
|
||||
return globalStore.getValueSettingsByKey('URL_TWITTER', false)
|
||||
}
|
||||
|
||||
function ChatWhatsapp() {
|
||||
// @ts-ignore
|
||||
return tools.getHttpForWhatsapp(this.Whatsapp_Cell)
|
||||
}
|
||||
|
||||
return {
|
||||
TelegramSupport,
|
||||
InstagramPage,
|
||||
Whatsapp_Cell,
|
||||
TwitterPage,
|
||||
ChatWhatsapp,
|
||||
FBPage,
|
||||
Telegram_UsernameHttp,
|
||||
static_data,
|
||||
t,
|
||||
}
|
||||
},
|
||||
})
|
||||
171
src/components/Footer/Footer.vue
Executable file
171
src/components/Footer/Footer.vue
Executable file
@@ -0,0 +1,171 @@
|
||||
<template>
|
||||
<div>
|
||||
<section class="landing__footer">
|
||||
<div class="row justify-between items-start q-col-gutter-xs">
|
||||
<div class="col-12 col-sm-4 ">
|
||||
<!--<span v-html="t('homepage.footer.description')">-->
|
||||
<!--</span>-->
|
||||
|
||||
<CFacebookFrame
|
||||
myclass="text-center" :fbimage="getValDb('FBPAGE_IMG', false)"
|
||||
:urlfbpage="getValDb('FBPAGE_FRAME', false)" :title="getValDb('FBPAGE_TITLE', false)">
|
||||
|
||||
</CFacebookFrame>
|
||||
|
||||
<div class=" q-my-md">
|
||||
<div class="landing__footer-icons row flex-center margin_buttons">
|
||||
<a v-if="!!FBPage()" :href="FBPage()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-facebook-f icon_contact links"> </i></a>
|
||||
|
||||
<a v-if="!!InstagramPage()" :href="InstagramPage()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-instagram icon_contact links"> </i></a>
|
||||
|
||||
<a v-if="!!TwitterPage()" :href="TwitterPage()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-twitter icon_contact links"> </i></a>
|
||||
|
||||
<a v-if="!!TelegramSupport()" :href="TelegramSupport()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-telegram icon_contact links"></i></a>
|
||||
|
||||
<a v-if="!!Whatsapp_Cell()" :href="ChatWhatsapp()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-whatsapp icon_contact links"></i></a>
|
||||
|
||||
<a v-if="!!Telegram_UsernameHttp()" :href="Telegram_UsernameHttp()" target="_blank">
|
||||
<i aria-hidden="true" class="q-icon fab fa-telegram icon_contact links"></i></a>
|
||||
|
||||
<!--<a href="" target="_blank"><i aria-hidden="true" class="q-icon fab fa-github"> </i></a>-->
|
||||
<!--<a href="https://twitter.com/" target="_blank"><i aria-hidden="true" class="q-icon fab fa-twitter"> </i></a>-->
|
||||
<!--<a href="https://discord.gg/5TDhbDg" target="_blank"><i aria-hidden="true"-->
|
||||
<!--class="q-icon fab fa-discord"> </i></a><a-->
|
||||
<!--href="https://forum.quasar-framework.org/" target="_blank"><i aria-hidden="true"-->
|
||||
<!--class="q-icon fas fa-comments"> </i></a><a-->
|
||||
<!--href="https://www.patreon.com/quasarframework" target="_blank"><i aria-hidden="true"-->
|
||||
<!--class="q-icon fab fa-patreon"> </i></a>-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="getValDb('URLMAP', false)" class="text-center">
|
||||
<span v-html="getValDb('MAP_TITLE', false)"></span>
|
||||
<br>
|
||||
<a :href="getValDb('URLMAP', false)" target="_blank" class="footer_link">Apri Mappa</a>
|
||||
</div>
|
||||
|
||||
<!--<div class="q-mt-xs copyrights">-->
|
||||
<!--<p class="mycontacts_text" v-html="t('homepage.copyrights')"></p>-->
|
||||
<!--</div>-->
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-4">
|
||||
<div class="text-center">
|
||||
|
||||
<div class="q-mt-xs mycontacts">
|
||||
<p class="mycontacts_title">{{t('homepage.titlecontatti')}}</p>
|
||||
|
||||
<div class="mycontacts_text">
|
||||
<i
|
||||
v-if="getValDb('MAIN_EMAIL', false)" aria-hidden="true"
|
||||
class="q-icon fas fa-envelope q-mx-sm"></i>
|
||||
<a :href="`mailto:` + getValDb('MAIN_EMAIL', false)" class="links">{{ getValDb('MAIN_EMAIL', false)
|
||||
}}</a><br>
|
||||
<div style="margin-bottom: 20px;"></div>
|
||||
<div
|
||||
v-for="(rec, index) in getarrValDb('CONTACTS_EMAIL_CELL', false)"
|
||||
:key="index"
|
||||
class="mycontacts_text margin_buttons_footer"
|
||||
style="margin-bottom: 0px;">
|
||||
<div>
|
||||
{{ rec.name }}: {{ rec.phone }}
|
||||
</div>
|
||||
<div>
|
||||
<i
|
||||
v-if="rec.email" aria-hidden="true"
|
||||
class="q-icon fas fa-envelope q-ma-sm"></i> <a
|
||||
:href="`mailto:`+ rec.email "
|
||||
class="links">{{rec.email}}</a>
|
||||
</div>
|
||||
|
||||
<div class="row justify-center margin_buttons_footer">
|
||||
<q-btn
|
||||
v-if="rec.email" fab-mini icon="fas fa-envelope"
|
||||
color="blue-grey-6" type="a"
|
||||
size="sm"
|
||||
:href="tools.getemailto(rec.email)" target="__blank">
|
||||
</q-btn>
|
||||
<q-btn
|
||||
v-if="tools.getHttpForWhatsapp(rec.phone)" fab-mini
|
||||
icon="fab fa-whatsapp"
|
||||
color="green" type="a"
|
||||
size="sm"
|
||||
:href="tools.getHttpForWhatsapp(rec.phone)" target="__blank">
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
v-if="tools.getHttpForTelegram(rec.usertelegram)" fab-mini
|
||||
icon="fab fa-telegram"
|
||||
color="blue" type="a"
|
||||
size="sm"
|
||||
:href="tools.getHttpForTelegram(rec.usertelegram)" target="__blank">
|
||||
</q-btn>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<span v-if="getValDb('CALL_WORKING_DAYS', false)"><br>orari per chiamate:<br>
|
||||
<span v-html="getValDb('CALL_WORKING_DAYS', false)"></span></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<FormNewsletter
|
||||
v-if="static_data.functionality.SHOW_NEWSLETTER"
|
||||
:idwebsite="tools.appid()"
|
||||
:locale="toolsext.getLocale()">
|
||||
</FormNewsletter>
|
||||
|
||||
<p class="text-center">
|
||||
<router-link v-if="static_data.functionality.SHOW_ONLY_POLICY" to="/policy" custom v-slot="{ navigate }">
|
||||
<span class="footer_link" @click="navigate" @keypress.enter="navigate" role="link">{{t('privacy_policy')}}</span></router-link>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-4 q-pa-md">
|
||||
<p style="text-align: center">
|
||||
<logo></logo>
|
||||
</p>
|
||||
<div v-for="(myitemmenu, ind) in static_data.routes" :key="ind">
|
||||
<div v-if="myitemmenu.infooter && tools.visumenu(myitemmenu)">
|
||||
|
||||
<div v-if="myitemmenu.solotitle">
|
||||
<span class="footer_link">{{tools.getLabelByItem(myitemmenu, mythisfoot)}}</span><br/>
|
||||
</div>
|
||||
<div v-else>
|
||||
<router-link :to="myitemmenu.path" custom v-slot="{ navigate }">
|
||||
<span class="footer_link" @click="navigate" @keypress.enter="navigate" role="link"><span
|
||||
v-if="myitemmenu.level_child > 0"> </span>
|
||||
{{tools.getLabelByItem(myitemmenu, mythisfoot)}}</span><br/>
|
||||
</router-link>
|
||||
</div>
|
||||
<!--<a :href="myitemmenu.path"><span class="footer_link">{{tools.getLabelByItem(myitemmenu, mythisfoot)}}</span></a><br/>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<q-page-scroller position="bottom-right" :scroll-offset="850" :offset="[18, 78]" style="opacity: 0.3">
|
||||
<q-btn fab icon="keyboard_arrow_up" color="accent"/>
|
||||
</q-page-scroller>
|
||||
<q-page-sticky v-if="ChatWhatsapp()" position="bottom-right" :offset="[18, 18]">
|
||||
<q-btn
|
||||
fab icon="fab fa-whatsapp" color="green" type="a" :href="ChatWhatsapp()" target="__blank"
|
||||
class="mybtn_sticky"/>
|
||||
</q-page-sticky>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./Footer.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './Footer.scss';
|
||||
</style>
|
||||
1
src/components/Footer/index.ts
Executable file
1
src/components/Footer/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as Footer } from './Footer.vue'
|
||||
30
src/components/FormNewsletter/FormNewsletter.scss
Executable file
30
src/components/FormNewsletter/FormNewsletter.scss
Executable file
@@ -0,0 +1,30 @@
|
||||
// Animations
|
||||
// slideFromBottom
|
||||
.slideFromBottom-enter, .slideFromBottom-leave-to {
|
||||
transform: translate(0px, 10em);
|
||||
}
|
||||
|
||||
.slideFromBottom-enter-to, .slideFromBottom-leave {
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
|
||||
.slideFromBottom-enter-active {
|
||||
transition: transform .2s ease-out;
|
||||
}
|
||||
|
||||
.slideFromBottom-leave-active {
|
||||
transition: transform .2s ease-in;
|
||||
}
|
||||
|
||||
.news_title {
|
||||
color: white;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.news_link {
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.news_link:hover {
|
||||
color: white;
|
||||
}
|
||||
125
src/components/FormNewsletter/FormNewsletter.ts
Executable file
125
src/components/FormNewsletter/FormNewsletter.ts
Executable file
@@ -0,0 +1,125 @@
|
||||
import {
|
||||
defineComponent, toRef,
|
||||
} from 'vue'
|
||||
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
import Api from '@api'
|
||||
import { serv_constants } from '@store/Modules/serv_constants'
|
||||
import { MixinBase } from '../../mixins/mixin-base'
|
||||
import { toolsext } from '@src/store/Modules/toolsext'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FormNewsletter',
|
||||
mixins: [MixinBase],
|
||||
props: {
|
||||
name: {
|
||||
required: false,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
surname: {
|
||||
required: false,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
email: {
|
||||
required: false,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
accept: {
|
||||
required: false,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
idwebsite: {
|
||||
required: false,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
locale: {
|
||||
required: false,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n();
|
||||
const accept = toRef(props, 'accept')
|
||||
const name = toRef(props, 'name')
|
||||
const surname = toRef(props, 'surname')
|
||||
const email = toRef(props, 'email')
|
||||
const idwebsite = toRef(props, 'idwebsite')
|
||||
const locale = toRef(props, 'locale')
|
||||
|
||||
const onSubmit = async function a2() {
|
||||
if (accept.value !== true) {
|
||||
$q.notify({
|
||||
color: 'red-5',
|
||||
textColor: 'white',
|
||||
icon: 'fas fa-exclamation-triangle',
|
||||
message: t('newsletter.license'),
|
||||
})
|
||||
return null
|
||||
}
|
||||
const usertosend = {
|
||||
email: email.value,
|
||||
firstName: name.value,
|
||||
lastName: surname.value,
|
||||
idwebsite: idwebsite.value,
|
||||
locale: locale.value,
|
||||
settomailchimp: toolsext.getValDb('MAILCHIMP_ON', true, false),
|
||||
}
|
||||
console.log(usertosend)
|
||||
|
||||
return Api.SendReq('/news/signup', 'POST', usertosend, false)
|
||||
.then((res) => {
|
||||
// console.log('res', res)
|
||||
if (res.data.code === serv_constants.RIS_SUBSCRIBED_OK) {
|
||||
$q.notify({
|
||||
color: 'green-4',
|
||||
textColor: 'white',
|
||||
icon: 'fas fa-check-circle',
|
||||
// message: t('newsletter.submitted')
|
||||
message: res.data.msg,
|
||||
})
|
||||
} else if (res.data.code === serv_constants.RIS_SUBSCRIBED_ALREADYEXIST) {
|
||||
$q.notify({
|
||||
color: 'orange-4',
|
||||
textColor: 'white',
|
||||
icon: 'fas fa-check-circle',
|
||||
// message: t('newsletter.submitted')
|
||||
message: res.data.msg,
|
||||
})
|
||||
} else {
|
||||
$q.notify({
|
||||
color: 'red-5',
|
||||
textColor: 'white',
|
||||
icon: 'fas fa-exclamation-triangle',
|
||||
message: res.data.msg,
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error)
|
||||
// UserStore.mutations.setErrorCatch(error)
|
||||
return false
|
||||
})
|
||||
}
|
||||
|
||||
function onReset() {
|
||||
name.value = ''
|
||||
surname.value = ''
|
||||
email.value = ''
|
||||
accept.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
onSubmit,
|
||||
onReset,
|
||||
}
|
||||
},
|
||||
|
||||
})
|
||||
66
src/components/FormNewsletter/FormNewsletter.vue
Executable file
66
src/components/FormNewsletter/FormNewsletter.vue
Executable file
@@ -0,0 +1,66 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="q-pa-md q-gutter-sm text-white">
|
||||
<p class="news_title">{{t('newsletter.title')}}</p>
|
||||
<q-form
|
||||
@submit="onSubmit"
|
||||
@reset="onReset"
|
||||
class="q-gutter-md"
|
||||
>
|
||||
<q-input
|
||||
filled
|
||||
name="firstName"
|
||||
dense
|
||||
dark standout
|
||||
v-model="name"
|
||||
:label="t('newsletter.name') + `*`"
|
||||
:hint="t('newsletter.namehint')"
|
||||
lazy-rules
|
||||
:rules="[ val => val && val.length > 0 || t('newsletter.typesomething')]">
|
||||
|
||||
</q-input>
|
||||
|
||||
<q-input
|
||||
filled
|
||||
dense
|
||||
dark standout
|
||||
v-model="surname"
|
||||
name="lastName"
|
||||
:label="t('newsletter.surname') + `*`"
|
||||
:hint="t('newsletter.surnamehint')"
|
||||
lazy-rules
|
||||
:rules="[ val => val && val.length > 0 || t('newsletter.typesomething')]">
|
||||
|
||||
</q-input>
|
||||
|
||||
<q-input
|
||||
filled
|
||||
dense
|
||||
dark standout
|
||||
v-model="email"
|
||||
:label="t('newsletter.email') + `*`"
|
||||
lazy-rules
|
||||
:rules="[ val => val && val.length > 6 || t('newsletter.typesomething')]">
|
||||
|
||||
</q-input>
|
||||
|
||||
<router-link to="/policy" custom v-slot="{ navigate }">
|
||||
<span class="news_link" @click="navigate" @keypress.enter="navigate" role="link">{{t('privacy_policy')}}</span></router-link>
|
||||
|
||||
<q-toggle dark v-model="accept" :label="t('newsletter.acceptlicense')"/>
|
||||
|
||||
<div>
|
||||
<q-btn :label="t('newsletter.submit')" type="submit" color="primary"/>
|
||||
<q-btn :label="t('newsletter.reset')" type="reset" color="primary" flat class="q-ml-sm"/>
|
||||
</div>
|
||||
</q-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./FormNewsletter.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './FormNewsletter.scss';
|
||||
</style>
|
||||
1
src/components/FormNewsletter/index.ts
Executable file
1
src/components/FormNewsletter/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as FormNewsletter } from './FormNewsletter.vue'
|
||||
317
src/components/Header/Header.scss
Executable file
317
src/components/Header/Header.scss
Executable file
@@ -0,0 +1,317 @@
|
||||
.layout-padding {
|
||||
padding: 1em 4em;
|
||||
}
|
||||
|
||||
.item-content {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 350;
|
||||
}
|
||||
|
||||
.q-toolbar__title{
|
||||
padding: 0 12px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.q-toolbar__title{
|
||||
padding: 0;
|
||||
}
|
||||
.layout-padding {
|
||||
padding: 1.5em .5em;
|
||||
}
|
||||
}
|
||||
|
||||
.fixed-left:hover {
|
||||
cursor: ew-resize;
|
||||
}
|
||||
|
||||
/*
|
||||
@-webkit-keyframes moveFromLeftFade {
|
||||
from {
|
||||
opacity: 0.3;
|
||||
-webkit-transform: translateX(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes moveFromLeftFade {
|
||||
from {
|
||||
opacity: 0.3;
|
||||
-webkit-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes moveFromTopFade {
|
||||
from {
|
||||
opacity: 0.3;
|
||||
-webkit-transform: translateY(0%);
|
||||
}
|
||||
}
|
||||
@keyframes moveFromTopFade {
|
||||
from {
|
||||
opacity: 0.3;
|
||||
-webkit-transform: translateY(0%);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@-webkit-keyframes moveToRight {
|
||||
from {
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes cartOut {
|
||||
from {
|
||||
transform: translate(0px, 0px);
|
||||
}
|
||||
to {
|
||||
transform: translate(1200px, 0px);
|
||||
animation-timing-function: ease-out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@-webkit-keyframes moveToLeft {
|
||||
from {
|
||||
}
|
||||
to {
|
||||
opacity: .5;
|
||||
-webkit-transform: translateX(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes moveToLeft {
|
||||
from {
|
||||
}
|
||||
to {
|
||||
opacity: .5;
|
||||
-webkit-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes moveToBottom {
|
||||
from {
|
||||
}
|
||||
to {
|
||||
opacity: .5;
|
||||
-webkit-transform: translateY(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes moveToBottom {
|
||||
from {
|
||||
}
|
||||
to {
|
||||
opacity: .5;
|
||||
-webkit-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes moveFromRight {
|
||||
from {
|
||||
opacity: .7;
|
||||
-webkit-transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes moveFromRight {
|
||||
from {
|
||||
opacity: .7;
|
||||
-webkit-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
.drawer-closer .item-content {
|
||||
margin-left: 20px !important;
|
||||
}
|
||||
|
||||
.drawer-content .list-label {
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
.drawer-content .item {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.router-link-active .item-primary {
|
||||
color: #027be3;
|
||||
}
|
||||
|
||||
.q-picker-textfield .q-picker-textfield-label {
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
.label-success .q-picker-textfield-label {
|
||||
color: #4caf50 !important;
|
||||
}
|
||||
|
||||
.label-error .q-picker-textfield-label {
|
||||
color: #f44336 !important;
|
||||
}
|
||||
|
||||
select {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
text-indent: 1px;
|
||||
text-overflow: '';
|
||||
}
|
||||
|
||||
.label-success .q-picker-textfield:after, .label-error .q-picker-textfield:after {
|
||||
content: "" !important;
|
||||
}
|
||||
|
||||
#android-preview iframe {
|
||||
margin-top: 64px;
|
||||
width: 357px;
|
||||
height: 590px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#ios-preview iframe {
|
||||
margin-top: 64px;
|
||||
width: 320px;
|
||||
height: 590px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
canvas {
|
||||
width: 270px !important;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 601px) {
|
||||
.adv-form-one .timeline-badge {
|
||||
right: auto !important;
|
||||
left: auto !important;
|
||||
}
|
||||
|
||||
.adv-form-one .timeline-content {
|
||||
margin-left: 3.9rem;
|
||||
}
|
||||
|
||||
.adv-form-one .timeline-item {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.adv-form-one .timeline-title {
|
||||
text-align: inherit !important;
|
||||
margin-left: 3.9rem;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
left: 1.6rem;
|
||||
}
|
||||
}
|
||||
|
||||
.adv-form-one .timeline-content .group .primary {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
.toolbar {
|
||||
min-height: 43px;
|
||||
}
|
||||
|
||||
.right-itens a, .right-itens button {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.sel_lang {
|
||||
padding: 5px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.fa-facebook:before {
|
||||
content: url('../../../public/icons/flag_it.svg');
|
||||
}
|
||||
|
||||
.clIconOnline {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.clIconOffline {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.flagimg {
|
||||
width: 30px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.clCloudUpload {
|
||||
transition: all 1s ease-out;
|
||||
color: initial;
|
||||
&.send {
|
||||
transition: all 1s ease-in;
|
||||
background-color: lightgreen;
|
||||
}
|
||||
&.receive {
|
||||
transition: all 1s ease-in;
|
||||
background-color: yellow;
|
||||
}
|
||||
&.error {
|
||||
transition: all 1s ease-in;
|
||||
background-color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.clIndexeddb {
|
||||
transition: all 1s ease-out;
|
||||
color: initial;
|
||||
&.receive {
|
||||
transition: all 1s ease-in;
|
||||
background-color: yellow;
|
||||
}
|
||||
&.send {
|
||||
transition: all 1s ease-in;
|
||||
background-color: lightgreen;
|
||||
}
|
||||
&.error {
|
||||
transition: all 1s ease-in;
|
||||
background-color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.btnNewVersHide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.btnNewVersShow {
|
||||
display: inline-block;
|
||||
padding: 4px 2px;
|
||||
}
|
||||
|
||||
.text-user {
|
||||
text-shadow: .05rem .05rem .15rem #fff;
|
||||
background-color: limegreen;
|
||||
border-radius: 1rem !important;
|
||||
text-align: center;
|
||||
margin: 1px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.text-cart {
|
||||
font-size: 1.15rem;
|
||||
text-shadow: .05rem .05rem .15rem #fff;
|
||||
background-color: limegreen;
|
||||
border-radius: 1rem !important;
|
||||
text-align: center;
|
||||
margin: 1px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.roundimg {
|
||||
border-radius: 50% !important;
|
||||
color: red;
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.titlesite {
|
||||
font-size: 1rem;
|
||||
}
|
||||
459
src/components/Header/Header.ts
Executable file
459
src/components/Header/Header.ts
Executable file
@@ -0,0 +1,459 @@
|
||||
import { useQuasar } from 'quasar'
|
||||
import {
|
||||
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRefs, watch, inject, computed,
|
||||
} from 'vue'
|
||||
|
||||
import { tools } from '@store/Modules/tools'
|
||||
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
import { boot } from 'quasar/wrappers'
|
||||
import { useRouter } from 'vue-router'
|
||||
import MixinUsers from '../../mixins/mixin-users'
|
||||
import { static_data } from '../../db/static_data'
|
||||
import messagePopover from '../../layouts/toolbar/messagePopover/messagePopover.vue'
|
||||
import drawer from '../../layouts/drawer/drawer.vue'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useTestStore } from '@store/testStore'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Header',
|
||||
mixins: [MixinUsers],
|
||||
components: {
|
||||
drawer, messagePopover, // CSigninNoreg, CMyAvatar, CMyCart
|
||||
},
|
||||
props: {
|
||||
extraContent: {
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
clBase: {
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
setup() {
|
||||
const store = inject('store')
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
const isUserNotAuth = ref(false)
|
||||
const iconConn = ref('wifi')
|
||||
const clIconConn = ref('clIconOnline')
|
||||
const strConn = ref('')
|
||||
const langshort = ref('')
|
||||
const clCloudUpload = ref('')
|
||||
const clCloudDownload = ref('')
|
||||
const clCloudUp_Indexeddb = ref('')
|
||||
const tabcmd = ref('')
|
||||
const clCloudDown_Indexeddb = ref('clIndexeddbsend')
|
||||
const photo = ref('')
|
||||
const visuimg = ref(true)
|
||||
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const testStore = useTestStore()
|
||||
|
||||
const stateconn = ref(globalStore.stateConnection)
|
||||
|
||||
function isonline() {
|
||||
return globalStore.stateConnection === 'online'
|
||||
}
|
||||
|
||||
function isAdmin() {
|
||||
return userStore.isAdmin
|
||||
}
|
||||
|
||||
function isManager() {
|
||||
return userStore.isManager
|
||||
}
|
||||
|
||||
const isSocio = computed(() => userStore.my.profile.socio)
|
||||
|
||||
function isSocioResidente() {
|
||||
return userStore.my.profile.socioresidente
|
||||
}
|
||||
|
||||
function isConsiglio() {
|
||||
return userStore.my.profile.consiglio
|
||||
}
|
||||
|
||||
function getcolormenu() {
|
||||
// @ts-ignore
|
||||
return this.isSocio ? 'green-7' : 'white'
|
||||
}
|
||||
|
||||
function isTutor() {
|
||||
return userStore.isTutor
|
||||
}
|
||||
|
||||
function isZoomeri() {
|
||||
return userStore.isZoomeri
|
||||
}
|
||||
|
||||
function isTratuttrici() {
|
||||
return userStore.isTratuttrici
|
||||
}
|
||||
|
||||
function conndata_changed() {
|
||||
return globalStore.connData
|
||||
}
|
||||
|
||||
function snakeToCamel(str: string) {
|
||||
return str.replace(/(-\w)/g, (m) => m[1].toUpperCase())
|
||||
}
|
||||
|
||||
function setLangAtt(mylang: string) {
|
||||
console.log('LANG =', mylang)
|
||||
// console.log('PRIMA $q.lang.isoName', $q.lang.isoName)
|
||||
|
||||
// dynamic import, so loading on demand only
|
||||
import(`quasar/lang/${mylang}`).then((lang) => {
|
||||
$q.lang.set(lang.default)
|
||||
|
||||
import('../../statics/i18n').then(() => {
|
||||
// console.log('MY LANG DOPO=', $q.lang.isoName)
|
||||
})
|
||||
})
|
||||
|
||||
globalStore.addDynamicPages()
|
||||
}
|
||||
|
||||
function setshortlang(lang: string) {
|
||||
for (const indrec in static_data.lang_available) {
|
||||
if (static_data.lang_available[indrec].value === lang) {
|
||||
// console.log('static_data.lang_available[indrec].short', static_data.lang_available[indrec].short, static_data.lang_available[indrec].value)
|
||||
langshort.value = static_data.lang_available[indrec].short
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isNewVersionAvailable() {
|
||||
return globalStore.isNewVersionAvailable
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// QUASAR Example using myevent to open drawer from another component or page
|
||||
// -------------------------------------------------------------------------
|
||||
// (1) This code is inside layout file that have a drawer
|
||||
// if leftDrawerOpen is true, drawer is displayed
|
||||
|
||||
// (2) Listen for an myevent in created
|
||||
/* created(){
|
||||
$root.$on("openLeftDrawer", openLeftDrawercb);
|
||||
},
|
||||
methods: {
|
||||
openURL,
|
||||
// (3) Define the callback in methods
|
||||
openLeftDrawercb() {
|
||||
leftDrawerOpen = !leftDrawerOpen;
|
||||
}
|
||||
}
|
||||
|
||||
// (4) In another component or page, emit the myevent!
|
||||
// Call the method when clicking button etc.
|
||||
methods: {
|
||||
openLeftDrawer() {
|
||||
$root.$emit("openLeftDrawer");
|
||||
}
|
||||
}
|
||||
// -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
const leftDrawerOpen = computed({
|
||||
get: () => globalStore.leftDrawerOpen,
|
||||
set: val => {
|
||||
globalStore.leftDrawerOpen = val
|
||||
},
|
||||
})
|
||||
|
||||
const rightDrawerOpen = computed({
|
||||
get: () => globalStore.rightDrawerOpen,
|
||||
set: val => {
|
||||
globalStore.rightDrawerOpen = val
|
||||
if (globalStore.rightDrawerOpen) globalStore.rightCartOpen = false
|
||||
},
|
||||
})
|
||||
|
||||
const rightCartOpen = computed({
|
||||
get: () => globalStore.rightCartOpen,
|
||||
set: val => {
|
||||
globalStore.rightCartOpen = val
|
||||
if (globalStore.rightCartOpen) globalStore.rightDrawerOpen = false
|
||||
},
|
||||
})
|
||||
|
||||
const lang = computed({
|
||||
get: () => $q.lang.isoName,
|
||||
set: mylang => {
|
||||
console.log('set lang', $q.lang.getLocale())
|
||||
$q.lang.set(snakeToCamel(mylang))
|
||||
// tools.showNotif($q, 'IMPOSTA LANG= ' + $i18n.locale)
|
||||
// console.log('IMPOSTA LANG= ' + $i18n.locale)
|
||||
|
||||
userStore.setlang($q.lang.getLocale())
|
||||
|
||||
let mylangtopass = mylang
|
||||
|
||||
mylangtopass = toolsext.checkLangPassed(mylangtopass)
|
||||
|
||||
setshortlang(mylangtopass)
|
||||
|
||||
setLangAtt(mylangtopass)
|
||||
|
||||
userStore.setLangServer()
|
||||
},
|
||||
})
|
||||
|
||||
watch(
|
||||
stateconn,
|
||||
// @ts-ignore
|
||||
(value: string, oldValue: string) => {
|
||||
globalStore.stateConnection = value
|
||||
},
|
||||
)
|
||||
|
||||
watch(
|
||||
conndata_changed,
|
||||
(value, oldValue) => {
|
||||
clCloudUpload.value = (value.uploading_server === 1) ? 'clCloudUpload send' : 'clCloudUpload'
|
||||
clCloudUpload.value = (value.downloading_server === 1) ? 'clCloudUpload receive' : 'clCloudUpload'
|
||||
clCloudUp_Indexeddb.value = (value.uploading_indexeddb === 1) ? 'clIndexeddb send' : 'clIndexeddb'
|
||||
clCloudUp_Indexeddb.value = (value.downloading_indexeddb === 1) ? 'clIndexeddb receive' : 'clIndexeddb'
|
||||
|
||||
/* clCloudUpload.value = (value.uploading_server === -1) ? 'clCloudUpload error' : clCloudUpload
|
||||
clCloudUpload.value = (value.downloading_server === -1) ? 'clCloudUpload error' : clCloudDownload
|
||||
clCloudUp_Indexeddb.value = (value.uploading_indexeddb === -1) ? 'clIndexeddb error' : clCloudUp_Indexeddb
|
||||
clCloudUp_Indexeddb.value = (value.downloading_indexeddb === -1) ? 'clIndexeddb error' : clCloudDown_Indexeddb
|
||||
|
||||
*/
|
||||
},
|
||||
)
|
||||
|
||||
/*
|
||||
@Watch('conn_changed', { immediate: true, deep: true })
|
||||
function changeconn_changed(value: string, oldValue: string) {
|
||||
if (value !== oldValue) {
|
||||
|
||||
// console.log('SSSSSSSS: ', value, oldValue)
|
||||
|
||||
const color = (value === 'online') ? 'positive' : 'warning'
|
||||
const statoconn = t('connection.conn') + ' ' + ((value === 'online') ? t('connection.online') : t('connection.offline'))
|
||||
|
||||
if (static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) {
|
||||
|
||||
if (!!oldValue) {
|
||||
tools.showNotif($q, statoconn, {
|
||||
color,
|
||||
icon: 'wifi'
|
||||
})
|
||||
}
|
||||
|
||||
changeIconConn()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
function RefreshApp() {
|
||||
// Unregister Service Worker
|
||||
navigator.serviceWorker.getRegistrations().then((registrations) => {
|
||||
for (const registration of registrations) {
|
||||
registration.unregister()
|
||||
}
|
||||
})
|
||||
window.location.reload(true)
|
||||
}
|
||||
|
||||
function changeIconConn() {
|
||||
iconConn.value = globalStore.stateConnection === 'online' ? 'wifi' : 'wifi_off'
|
||||
clIconConn.value = globalStore.stateConnection === 'online' ? 'clIconOnline' : 'clIconOffline'
|
||||
}
|
||||
|
||||
function getAppVersion() {
|
||||
// return "AA"
|
||||
let strv = ''
|
||||
if (process.env.DEV) {
|
||||
strv = 'DEV '
|
||||
} else if (process.env.TEST) {
|
||||
strv = 'TEST '
|
||||
}
|
||||
return `[${strv}${process.env.APP_VERSION}]`
|
||||
}
|
||||
|
||||
function getLangAtt() {
|
||||
return $q.lang.isoName
|
||||
}
|
||||
|
||||
function BeforeMount() {
|
||||
// Estrai la Lang dal Localstorage
|
||||
|
||||
// console.log('$q.i18n=', $q.i18n, '$q.getLocale()=', $q.lang.isoName)
|
||||
const mybrowserLang = getLangAtt()
|
||||
// tools.showNotif($q, 'prima: ' + String(my))
|
||||
|
||||
let mylang = tools.getItemLS(toolsext.localStorage.lang)
|
||||
if (mylang === '') {
|
||||
if (navigator) {
|
||||
mylang = navigator.language
|
||||
// console.log(`LANG2 NAVIGATOR ${mylang}`)
|
||||
} else {
|
||||
mylang = $q.lang.isoName
|
||||
}
|
||||
|
||||
// console.log('IMPOSTA LANGMY', mylang)
|
||||
}
|
||||
|
||||
mylang = toolsext.checkLangPassed(mylang)
|
||||
|
||||
setLangAtt(mylang)
|
||||
setshortlang(mylang)
|
||||
}
|
||||
|
||||
function mounted() {
|
||||
// Test this by running the code snippet below and then
|
||||
// use the "TableOnlyView" checkbox in DevTools Network panel
|
||||
|
||||
// console.log('Event LOAD')
|
||||
if (window) {
|
||||
window.addEventListener('load', () => {
|
||||
// console.log('2) ENTERING Event LOAD')
|
||||
|
||||
function updateOnlineStatus(event: any) {
|
||||
if (navigator.onLine) {
|
||||
console.log('EVENT ONLINE!')
|
||||
// handle online status
|
||||
globalStore.setStateConnection('online')
|
||||
// mychangeIconConn()
|
||||
} else {
|
||||
console.log('EVENT OFFLINE!')
|
||||
// handle offline status
|
||||
globalStore.setStateConnection('offline')
|
||||
// mychangeIconConn()
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('online', updateOnlineStatus)
|
||||
window.addEventListener('offline', updateOnlineStatus)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function imglogo() {
|
||||
return `../../${tools.getimglogo()}`
|
||||
}
|
||||
|
||||
function getappname() {
|
||||
return tools.getsuffisso() + tools.getappname(tools.isMobile())
|
||||
}
|
||||
|
||||
function toggleanimation() {
|
||||
console.log('toggleanimation')
|
||||
visuimg.value = false
|
||||
setTimeout(() => {
|
||||
visuimg.value = true
|
||||
}, 100)
|
||||
}
|
||||
|
||||
function logoutHandler() {
|
||||
userStore.logout()
|
||||
.then(() => {
|
||||
// $router.replace('/logout')
|
||||
//
|
||||
// setTimeout(() => {
|
||||
// $router.replace('/')
|
||||
// }, 1000)
|
||||
|
||||
tools.showNotif($q, t('logout.uscito'), { icon: 'exit_to_app' })
|
||||
})
|
||||
}
|
||||
|
||||
function isLogged() {
|
||||
return userStore.isLogged
|
||||
}
|
||||
|
||||
function isEmailVerified() {
|
||||
return userStore.my.verified_email
|
||||
}
|
||||
|
||||
function clickregister() {
|
||||
rightDrawerOpen.value = false
|
||||
|
||||
const $router = useRouter()
|
||||
$router.replace('/signup')
|
||||
}
|
||||
|
||||
function getnumItemsCart() {
|
||||
/* const arrcart = Products.cart
|
||||
if (!!arrcart) {
|
||||
if (!!arrcart.items) {
|
||||
const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity, 0)
|
||||
return total
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
return 0
|
||||
}
|
||||
|
||||
function getnumOrdersCart() {
|
||||
/* const arrorderscart = Products.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED)
|
||||
// const arrorderscart = Products.orders
|
||||
if (!!arrorderscart) {
|
||||
return arrorderscart.length
|
||||
}
|
||||
|
||||
*/
|
||||
return 0
|
||||
}
|
||||
|
||||
function getcart() {
|
||||
// return Products.cart
|
||||
return null
|
||||
}
|
||||
|
||||
function getClassColorHeader() {
|
||||
if (tools.isTest()) return 'bg-warning'
|
||||
if (tools.isDebug()) return 'bg-info'
|
||||
return 'bg-primary'
|
||||
}
|
||||
|
||||
function changecmd(value: any) {
|
||||
console.log('changecmd', value)
|
||||
globalStore.changeCmdClick(value)
|
||||
}
|
||||
|
||||
onBeforeMount(BeforeMount)
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
store,
|
||||
static_data,
|
||||
globalStore,
|
||||
leftDrawerOpen,
|
||||
rightDrawerOpen,
|
||||
rightCartOpen,
|
||||
lang,
|
||||
isLogged,
|
||||
isEmailVerified,
|
||||
getnumOrdersCart,
|
||||
t,
|
||||
isonline,
|
||||
isAdmin,
|
||||
isManager, isSocio, isSocioResidente, isConsiglio, getcolormenu,
|
||||
isNewVersionAvailable,
|
||||
getAppVersion,
|
||||
RefreshApp,
|
||||
changecmd,
|
||||
imglogo,
|
||||
getappname,
|
||||
toggleanimation,
|
||||
}
|
||||
},
|
||||
|
||||
})
|
||||
237
src/components/Header/Header.vue
Executable file
237
src/components/Header/Header.vue
Executable file
@@ -0,0 +1,237 @@
|
||||
<template>
|
||||
<div>
|
||||
<q-header reveal elevated :class="getClassColorHeader">
|
||||
<q-toolbar
|
||||
color="primary"
|
||||
:glossy="$q.theme === 'mat'"
|
||||
:inverted="$q.theme === 'ios'"
|
||||
class="toolbar">
|
||||
|
||||
<q-btn
|
||||
flat
|
||||
dense
|
||||
round
|
||||
@click="leftDrawerOpen = !leftDrawerOpen"
|
||||
aria-label="Menu">
|
||||
<q-icon name="menu"/>
|
||||
</q-btn>
|
||||
|
||||
<div v-if="$q.platform.is.desktop">
|
||||
<!--I'm only rendered on desktop!-->
|
||||
</div>
|
||||
|
||||
<div v-if="$q.platform.is.mobile">
|
||||
<!--I'm only rendered on mobile!-->
|
||||
</div>
|
||||
|
||||
<div v-if="$q.platform.is.electron">
|
||||
<!--I'm only rendered on Electron!-->
|
||||
</div>
|
||||
|
||||
<q-btn
|
||||
ripple
|
||||
size="md"
|
||||
id="newvers" v-if="isNewVersionAvailable" color="secondary" rounded icon="refresh"
|
||||
class="btnNewVersShow" @click="RefreshApp()" :label="t('notification.newVersionAvailable')">
|
||||
</q-btn>
|
||||
|
||||
<q-toolbar-title class="row items-center">
|
||||
<q-avatar>
|
||||
<img :src="imglogo()" height="27" alt="Immagine Logo">
|
||||
</q-avatar>
|
||||
<div class="q-mx-sm titlesite">{{ getappname() }}</div>
|
||||
<template v-slot:subtitle>
|
||||
<div>{{ t('msg.myDescriz') }} {{ getAppVersion() }}</div>
|
||||
</template>
|
||||
</q-toolbar-title>
|
||||
|
||||
<!--
|
||||
<div v-if="isAdmin">
|
||||
<q-btn flat dense round aria-label="">
|
||||
<q-icon :class="clCloudUpload" nametranslate="cloud_upload"></q-icon>
|
||||
</q-btn>
|
||||
|
||||
<q-btn flat dense round aria-label="">
|
||||
<q-icon :class="clCloudUp_Indexeddb" nametranslate="arrow_upward"></q-icon>
|
||||
</q-btn>
|
||||
|
||||
</div>
|
||||
-->
|
||||
|
||||
<q-btn
|
||||
v-if="!isonline && static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION"
|
||||
flat
|
||||
dense
|
||||
round
|
||||
aria-label="Connection"
|
||||
>
|
||||
<q-icon :name="iconConn" :class="clIconConn"></q-icon>
|
||||
<q-icon v-if="isUserNotAuth" name="device_unknown"></q-icon>
|
||||
</q-btn>
|
||||
|
||||
<q-btn-dropdown
|
||||
stretch
|
||||
v-if="static_data.lang_available.length > 1"
|
||||
flat
|
||||
:label="langshort"
|
||||
auto-close
|
||||
>
|
||||
<q-list bordered>
|
||||
<q-item
|
||||
clickable v-ripple
|
||||
|
||||
v-for="langrec in static_data.lang_available" :key="langrec.value"
|
||||
@click="lang = langrec.value">
|
||||
<q-item-section avatar>
|
||||
<img :src="langrec.image" class="flagimg" alt="flag">
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
{{ langrec.label }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-btn-dropdown>
|
||||
|
||||
<div v-if="static_data.functionality.SHOW_MESSAGES">
|
||||
<message-popover></message-popover>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div class="right-itens">
|
||||
<label>{{ t('msg.hello') }}</label> <span v-model="prova"></span> !
|
||||
</div>-->
|
||||
|
||||
<!-- BUTTON USER BAR -->
|
||||
|
||||
<q-btn
|
||||
class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && !isLogged" dense flat round
|
||||
icon="menu"
|
||||
@click="rightDrawerOpen = !rightDrawerOpen">
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
class="q-mx-xs" v-if="static_data.functionality.ENABLE_ECOMMERCE && isLogged" round dense flat
|
||||
@click="rightCartOpen = !rightCartOpen" icon="fas fa-shopping-cart">
|
||||
|
||||
<q-badge v-if="getnumItemsCart > 0" color="red" floating transparent>
|
||||
{{ getnumItemsCart }}
|
||||
</q-badge>
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
class="q-mx-xs" v-if="static_data.functionality.ENABLE_ECOMMERCE && isLogged && getnumOrdersCart > 0"
|
||||
round dense flat
|
||||
to="/orderinfo" icon="fas fa-list-ol">
|
||||
|
||||
<q-badge v-if="getnumOrdersCart > 0" color="blue" floating transparent>
|
||||
{{ getnumOrdersCart }}
|
||||
</q-badge>
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
|
||||
@click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon" :color="getcolormenu">
|
||||
<!--<q-badge v-if="isSocio" color="green" floating transparent>
|
||||
s
|
||||
</q-badge>-->
|
||||
</q-btn>
|
||||
|
||||
</q-toolbar>
|
||||
|
||||
</q-header>
|
||||
|
||||
<q-drawer
|
||||
side="left"
|
||||
bordered
|
||||
show-if-above
|
||||
:breakpoint="500"
|
||||
v-model="leftDrawerOpen"
|
||||
:content-class="['bg-grey-1', 'q-pa-sm']"
|
||||
:content-style="{padding: '0px'}"
|
||||
>
|
||||
<drawer :clBase="clBase"></drawer>
|
||||
|
||||
</q-drawer>
|
||||
|
||||
<!-- USER BAR -->
|
||||
<q-drawer v-if="static_data.functionality.ENABLE_ECOMMERCE" v-model="rightCartOpen" side="right" elevated>
|
||||
<q-btn
|
||||
class="absolute-top-right" style="margin-right: 10px; color: white;"
|
||||
dense flat round icon="close" @click="rightCartOpen = !rightCartOpen">
|
||||
</q-btn>
|
||||
<div v-if="isLogged" class="text-weight-bold text-cart">Carrello
|
||||
</div>
|
||||
<CMyCart></CMyCart>
|
||||
</q-drawer>
|
||||
<!-- USER BAR -->
|
||||
<q-drawer v-if="static_data.functionality.SHOW_USER_MENU" v-model="rightDrawerOpen" side="right" elevated>
|
||||
<div id="profile">
|
||||
<q-img
|
||||
class="absolute-top" src="images/landing_first_section.png"
|
||||
style="height: 150px" alt="section page">
|
||||
</q-img>
|
||||
<div class="absolute-top bg-transparent text-black center_img" style="margin-top: 10px;">
|
||||
<div class="text-center q-ma-xs boldhigh text-white text-h7">Area Personale</div>
|
||||
|
||||
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
|
||||
|
||||
<q-btn
|
||||
class="absolute-top-right" style="margin-right: 10px; color: white;"
|
||||
dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen">
|
||||
</q-btn>
|
||||
|
||||
<div v-if="isLogged" class="text-weight-bold text-user">{{ Username }} - {{ myName }}
|
||||
</div>
|
||||
<div class="row justify-evenly q-pa-xs-sm">
|
||||
<div v-if="isLogged && isAdmin" class="text-weight-bold text-user bg-red q-px-xs">Admin</div>
|
||||
<div v-if="isSocio" class="text-weight-bold text-user q-px-xs">Socio</div>
|
||||
<div v-if="isSocioResidente" class="text-weight-bold text-user q-px-xs bg-amber">Residente</div>
|
||||
<div v-if="isConsiglio" class="text-weight-bold text-user q-px-xs bg-deep-orange-10">Consiglio</div>
|
||||
<div v-if="isManager" class="text-weight-bold text-user bg-blue q-px-xs">Segreteria</div>
|
||||
<div v-if="isTutor" class="text-weight-bold text-user q-px-xs">Tutor</div>
|
||||
<div v-if="isTratuttrici" class="text-weight-bold text-user q-px-xs">Editor</div>
|
||||
</div>
|
||||
<div v-if="!isLogged" class="text-user text-italic bg-red">
|
||||
{{ t('user.loggati') }}
|
||||
</div>
|
||||
|
||||
<div v-if="isLogged && !isEmailVerified" class="text-verified">{{
|
||||
t('components.authentication.email_verification.verify_email')
|
||||
}}
|
||||
</div>
|
||||
|
||||
<!--<span class="text-white" v-if="Verificato"> {{t('reg.verificato')}} </span>-->
|
||||
<!--<span class="text-white background-red" v-else> {{t('reg.non_verificato')}} </span>-->
|
||||
|
||||
<div v-if="isLogged" id="user-actions" class="column justify-center q-gutter-sm q-ma-sm center-150">
|
||||
<q-btn rounded color="primary" icon="person" to="/profile">{{ t('pages.profile') }}</q-btn>
|
||||
<!--<q-btn round color="warning" icon="lock"></q-btn>-->
|
||||
<q-btn rounded color="negative" icon="exit_to_app" @click='logoutHandler'>{{ t('login.esci') }}</q-btn>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div style="margin-top:120px;"></div>
|
||||
<div v-show="!isLogged">
|
||||
|
||||
<div class="q-ma-md" style="">
|
||||
<CSigninNoreg :showregbutt="true">
|
||||
|
||||
</CSigninNoreg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-if="isLogged" class="q-mt-lg"></div>
|
||||
|
||||
<slot></slot>
|
||||
|
||||
</q-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./Header.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './Header.scss';
|
||||
</style>
|
||||
1
src/components/Header/index.ts
Executable file
1
src/components/Header/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as Header } from './Header.vue'
|
||||
11
src/components/index.ts
Executable file
11
src/components/index.ts
Executable file
@@ -0,0 +1,11 @@
|
||||
export * from './logo'
|
||||
export * from './CMyPage'
|
||||
export * from './CTitle'
|
||||
export * from './CImgTitle'
|
||||
export * from './BannerCookies'
|
||||
export * from './testpao'
|
||||
export * from './Footer'
|
||||
export * from './FormNewsletter'
|
||||
// export * from './PagePolicy'
|
||||
// export * from './CFacebookFrame'
|
||||
// export * from './CPreloadImages'
|
||||
1
src/components/logo/index.ts
Executable file
1
src/components/logo/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as Logo } from './logo.vue'
|
||||
39
src/components/logo/logo.scss
Executable file
39
src/components/logo/logo.scss
Executable file
@@ -0,0 +1,39 @@
|
||||
|
||||
.svgclass {
|
||||
color: white;
|
||||
transform: translateY(0px);
|
||||
|
||||
}
|
||||
|
||||
|
||||
.svgclass_animate {
|
||||
transform: translateY(-70px);
|
||||
color: red;
|
||||
}
|
||||
|
||||
#sun {
|
||||
animation: gravity 5s infinite;
|
||||
|
||||
}
|
||||
|
||||
#logoimg {
|
||||
height: 50px;
|
||||
width: auto;
|
||||
@media screen and (max-width: 600px) {
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gravity {
|
||||
0% {
|
||||
transform: rotateY(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotateY(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#smile {
|
||||
opacity: 0.1 !important;
|
||||
fill: red;
|
||||
}
|
||||
|
||||
33
src/components/logo/logo.ts
Executable file
33
src/components/logo/logo.ts
Executable file
@@ -0,0 +1,33 @@
|
||||
import {
|
||||
defineComponent,
|
||||
} from 'vue'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Logo',
|
||||
props: {
|
||||
mystyle: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
|
||||
setup() {
|
||||
function logoimg() {
|
||||
return `${tools.getimglogo()}`
|
||||
}
|
||||
|
||||
function logoalt() {
|
||||
const { t } = useI18n();
|
||||
return t('ws.sitename')
|
||||
}
|
||||
|
||||
return {
|
||||
logoimg,
|
||||
logoalt,
|
||||
}
|
||||
},
|
||||
})
|
||||
11
src/components/logo/logo.vue
Executable file
11
src/components/logo/logo.vue
Executable file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<div id="logo">
|
||||
<img id="logoimg" :alt="logoalt()" :src=logoimg() :style="mystyle">
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./logo.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './logo.scss';
|
||||
</style>
|
||||
8
src/components/models.ts
Executable file
8
src/components/models.ts
Executable file
@@ -0,0 +1,8 @@
|
||||
export interface Todo {
|
||||
id: number;
|
||||
content: string;
|
||||
}
|
||||
|
||||
export interface Meta {
|
||||
totalCount: number;
|
||||
}
|
||||
1
src/components/testpao/index.ts
Executable file
1
src/components/testpao/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export { default as TestPao } from './testpao.vue'
|
||||
39
src/components/testpao/testpao.scss
Executable file
39
src/components/testpao/testpao.scss
Executable file
@@ -0,0 +1,39 @@
|
||||
|
||||
.svgclass {
|
||||
color: white;
|
||||
transform: translateY(0px);
|
||||
|
||||
}
|
||||
|
||||
|
||||
.svgclass_animate {
|
||||
transform: translateY(-70px);
|
||||
color: red;
|
||||
}
|
||||
|
||||
#sun {
|
||||
animation: gravity 5s infinite;
|
||||
|
||||
}
|
||||
|
||||
#logoimg {
|
||||
height: 50px;
|
||||
width: auto;
|
||||
@media screen and (max-width: 600px) {
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gravity {
|
||||
0% {
|
||||
transform: rotateY(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotateY(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#smile {
|
||||
opacity: 0.1 !important;
|
||||
fill: red;
|
||||
}
|
||||
|
||||
41
src/components/testpao/testpao.ts
Executable file
41
src/components/testpao/testpao.ts
Executable file
@@ -0,0 +1,41 @@
|
||||
import {
|
||||
defineComponent,
|
||||
} from 'vue'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import { static_data } from '@src/db/static_data'
|
||||
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { FormNewsletter } from '../FormNewsletter'
|
||||
import { MixinBase } from '../../mixins/mixin-base'
|
||||
import { Logo } from '../logo'
|
||||
import { useI18n } from '@src/boot/i18n'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'TestPao',
|
||||
mixins: [MixinBase],
|
||||
components: { Logo, FormNewsletter },
|
||||
props: {
|
||||
mystyle: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
|
||||
setup() {
|
||||
function logoimg() {
|
||||
return `${tools.getimglogo()}`
|
||||
}
|
||||
|
||||
function logoalt() {
|
||||
const { t } = useI18n();
|
||||
return t('ws.sitename')
|
||||
}
|
||||
|
||||
return {
|
||||
logoimg,
|
||||
logoalt,
|
||||
}
|
||||
},
|
||||
})
|
||||
11
src/components/testpao/testpao.vue
Executable file
11
src/components/testpao/testpao.vue
Executable file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<div id="logo">
|
||||
<img id="logoimg" :alt="logoalt()" :src=logoimg() :style="mystyle">
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./testpao.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './testpao.scss';
|
||||
</style>
|
||||
36
src/config.ts
Executable file
36
src/config.ts
Executable file
@@ -0,0 +1,36 @@
|
||||
interface IUriConfig {
|
||||
auth?: string
|
||||
content?: string
|
||||
site?: string
|
||||
services?: string
|
||||
}
|
||||
|
||||
const uri: IUriConfig = {}
|
||||
|
||||
const addProp = (obj: {}, propName: string, value: string) => {
|
||||
Object.defineProperty(obj, propName, {
|
||||
enumerable: false,
|
||||
get: () => `//${window.location.host}${value}`,
|
||||
})
|
||||
}
|
||||
|
||||
addProp(uri, 'auth', '/auth/')
|
||||
addProp(uri, 'content', '/api/content/')
|
||||
addProp(uri, 'site', process.env.MONGODB_HOST ? process.env.MONGODB_HOST : '')
|
||||
addProp(uri, 'services', '/api/')
|
||||
|
||||
const config = {
|
||||
claimsNamespace: '//toucan/claims',
|
||||
uri,
|
||||
auth: {
|
||||
accessTokenKey: 'AUTH-LOCAL',
|
||||
externalProviderKey: 'AUTH-EXTERNAL',
|
||||
},
|
||||
uopt: 'UOPT',
|
||||
xsrf: {
|
||||
cookieName: 'XSRF-TOKEN',
|
||||
headerName: 'X-XSRF-TOKEN',
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
||||
1
src/css/app.scss
Executable file
1
src/css/app.scss
Executable file
@@ -0,0 +1 @@
|
||||
// app global css in SCSS form
|
||||
0
src/css/app.styl
Executable file
0
src/css/app.styl
Executable file
24
src/css/quasar.variables.scss
Executable file
24
src/css/quasar.variables.scss
Executable file
@@ -0,0 +1,24 @@
|
||||
// Quasar SCSS (& Sass) Variables
|
||||
// --------------------------------------------------
|
||||
// To customize the look and feel of this app, you can override
|
||||
// the Sass/SCSS variables found in Quasar's source Sass/SCSS files.
|
||||
|
||||
// Check documentation for full list of Quasar variables
|
||||
|
||||
// Your own variables (that are declared here) and Quasar's own
|
||||
// ones will be available out of the box in your .vue/.scss/.sass files
|
||||
|
||||
// It's highly recommended to change the default colors
|
||||
// to match your app's branding.
|
||||
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
||||
|
||||
$primary : #1976D2;
|
||||
$secondary : #26A69A;
|
||||
$accent : #9C27B0;
|
||||
|
||||
$dark : #1D1D1D;
|
||||
|
||||
$positive : #21BA45;
|
||||
$negative : #C10015;
|
||||
$info : #31CCEC;
|
||||
$warning : #F2C037;
|
||||
89
src/db/db_data.js
Executable file
89
src/db/db_data.js
Executable file
@@ -0,0 +1,89 @@
|
||||
import { IEvents } from '../model';
|
||||
|
||||
export const db_data = {
|
||||
URL_FACEBOOK: 'https://www.facebook.com/associazioneshen',
|
||||
|
||||
userdata: {
|
||||
calendar_editable: false,
|
||||
|
||||
},
|
||||
|
||||
events: [
|
||||
{
|
||||
title: 'Scambi Reiki',
|
||||
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
|
||||
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dell’inizio della serata per ricevere le informazioni pratiche.',
|
||||
date: '2019-07-11',
|
||||
time: '21:00',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'orange',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
infoextra: '',
|
||||
linkpdf: 'files/eventi/Reiki_aMICHI.pdf',
|
||||
},
|
||||
{
|
||||
title: 'Scambi Reiki',
|
||||
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
|
||||
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dell’inizio della serata per ricevere le informazioni pratiche.',
|
||||
date: '2019-07-20',
|
||||
time: '21:00',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'orange',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
infoextra: '',
|
||||
linkpdf: '',
|
||||
},
|
||||
{
|
||||
title: 'Seminario Reiki 1° Livello',
|
||||
details: 'I seminari vengono organizzati volutamente in gruppi poco numerosi.\n'
|
||||
+ 'Si crea così un ambiente accogliente e tranquillo con un atmosfera conviviale.<br />'
|
||||
+ ''
|
||||
+ 'Per info vedi <a href="reiki/seminari">Seminari Reiki</a>',
|
||||
date: '2019-07-22',
|
||||
days: 2,
|
||||
time: '9:00',
|
||||
side: 'left',
|
||||
bgcolor: 'red',
|
||||
icon: 'fas fa-chalkboard-teacher',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
teacher2: 'Elisa Ghizzardi',
|
||||
avatar2: 'elisa.png',
|
||||
infoextra: 'sabato e domenica dalle 10.00 alle 18.00',
|
||||
linkpdf: '',
|
||||
},
|
||||
{
|
||||
title: 'Presentazione Corsi per Operatori del Massaggio del Benessere',
|
||||
details: 'Vieni alla presentazione dei Corsi!<br>10 settembre a Ravenna, 17 settembre a Lugo',
|
||||
date: '2019-09-10',
|
||||
time: '20:30',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'blue',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/scuolaopbenessere/img1.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Operatori',
|
||||
avatar: 'cristina.png',
|
||||
avatar2: 'elisa.png',
|
||||
infoextra: '',
|
||||
linkpdf: '',
|
||||
},
|
||||
],
|
||||
}
|
||||
390
src/db/i18n_website.js
Executable file
390
src/db/i18n_website.js
Executable file
@@ -0,0 +1,390 @@
|
||||
const msg_website = {
|
||||
it: {
|
||||
pages: {
|
||||
home: 'Principale',
|
||||
SignUp: 'Registrazione',
|
||||
SignIn: 'Login',
|
||||
vreg: 'Verifica Reg',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Todo: 'Todo',
|
||||
personal: 'Personale',
|
||||
work: 'Lavoro',
|
||||
shopping: 'Spesa',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
projects: 'Progetti',
|
||||
favproj: 'Favoriti',
|
||||
},
|
||||
projall: 'Tutti',
|
||||
projectsShared: 'Miei Condivisi',
|
||||
myprojects: 'Miei Personali',
|
||||
msg: {
|
||||
hello: 'Buongiorno',
|
||||
myAppName: 'FreePlanet',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito e senza Pubblicità',
|
||||
underconstruction: 'App in costruzione...',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: 'Il primo Vero Social',
|
||||
sottoTitoloApp2: 'Libero, Equo e Solidale',
|
||||
sottoTitoloApp3: 'dove Vive Consapevolezza e Aiuto Comunitario',
|
||||
sottoTitoloApp4: 'Gratuito e senza Pubblicità',
|
||||
},
|
||||
homepage: {
|
||||
descrapp_title1: 'Uniti per Evolvere e Sperimentare',
|
||||
descrapp_pag1: 'Riscopri come il valore della <strong>Condivisione</strong> e della <strong>Cooperazione</strong>, possa aiutarci a ritrovare il profondo '
|
||||
+ 'senso della <strong>Vita</strong>, perduto in questa società consumista, e riporti quei <strong>Sani Pricìpi Naturali</strong> ed Umani di <strong>Fratellanza</strong>'
|
||||
+ ' che intere popolazioni antiche conoscevano bene.',
|
||||
descrapp_pag2: 'E\' giunta l\'ora di utilizzare i nuovi strumenti <strong>Tecnologici</strong> a nostro <strong>favore</strong>, per <strong>Liberarci</strong> '
|
||||
+ 'così piano piano dalla <strong>schiavitù</strong> del <strong>"Lavoro per generare Denaro"</strong> e trasformando le nostre <strong>Capacitá</strong> in '
|
||||
+ '<strong>Risorse Umane</strong> per poterci sostenere e vivere in <strong>Armonia</strong> con gli altri.',
|
||||
freesocial: {
|
||||
title: 'Free Social',
|
||||
descr: 'Una Community organizzata per <strong>Categorie</strong>, dove potrai unirti a <strong>Gruppi Tematici</strong>, '
|
||||
+ 'Condividere <strong>Esperienze</strong> e unire Competenze per organizzare e sostenere <strong>Progetti Innovativi</strong> per il Popolo.<br><br>'
|
||||
+ 'Verranno evidenziati sviluppi <strong>Etici</strong> come l\'<strong>Auto-Produzione</strong>, la <strong>Sostenibilitá</strong>, '
|
||||
+ 'la Buona <strong>Salute Naturale</strong> e il <strong>Rispetto per l\'Ambiente</strong> e per tutti gli <strong>Esseri Viventi</strong> di questo '
|
||||
+ '<strong>Pianeta</strong>. Chiunque potrá esprimere il proprio <strong>Consenso o Dissenso</strong> partecipando a <strong>Sondaggi Interattivi</strong>'
|
||||
+ ' e realizzare insieme i <strong>Cambiamenti</strong> necessari alla nostra Società.',
|
||||
},
|
||||
freetalent: {
|
||||
title: 'Free Talent',
|
||||
descr: 'Condividi i tuoi <strong>Talenti</strong> e <strong>Abilità</strong>, '
|
||||
+ 'al posto del denaro guadagnagnerai <strong>Tempo</strong>.<br> '
|
||||
+ '<strong>"1 ora"</strong> diventa moneta di scambio, uguale per tutti.<br>'
|
||||
+ 'Potrai utilizzare questi tuoi <strong>"Crediti Tempo"</strong> per soddisfare le tue necessità, cercando nelle <strong>Competenze Disponibili</strong>.<br>'
|
||||
+ 'Nel Dare e Ricevere, si creeranno così legami di <strong>Amicizia, Solidarietà, Cooperazione e Divertimento</strong><br><br>'
|
||||
+ 'Questo progetto vuole diffondere, ora in maniera informatizzata, questa realtà che gia esiste da tanti anni, e viene chiamata <strong>"Banca del Tempo"</strong>. '
|
||||
+ 'Le <strong>segreterie</strong> sparse in tutto il mondo, serviranno a dare maggiore <strong>affidabilità</strong> e <strong>fiducia</strong> negli scambi di talenti tra persone sconosciute. '
|
||||
+ 'Creeremo così una <strong>rete di fiducia</strong> nel vicinato, come giá viene praticato in numerosi <strong>Ecovillaggi</strong> e Comunità del mondo.',
|
||||
},
|
||||
freegas: {
|
||||
title: 'Free G.A.S.',
|
||||
descr: 'Ti piacerebbe utilizzare una App che ti permetta facilmente di acquistare Prodotti Locali direttamente dal <strong>Produttore</strong>?<br>'
|
||||
+ 'Con i <strong>Gruppi di Acquisto Solidale</strong> si evitano intermediazioni inutili, ottenendo parecchi benefici tra cui:<br>'
|
||||
+ '<ul class="mylist" style="padding-left: 20px;"><li><strong>Qualitá Superiore</strong> del prodotto</li>'
|
||||
+ '<li>Le <strong>Recensioni</strong> dei consumatori favoriranno i Produttori con Sani Intenti</li>'
|
||||
+ '<li>Possiblità d\'interagire con il Produttore</li>'
|
||||
+ '<li>Apertura alle Relazioni tra persone, condividendo <strong>Ricette</strong> e <strong>Consigli</strong> preziosi</li>'
|
||||
+ '<li><strong>Risparmio</strong> di soldi (prezzi all\'Ingrosso)</li>'
|
||||
+ '<li>Valorizzare il <strong>Territorio</strong> e l\'Economia <strong>Locale</strong></li>'
|
||||
+ '<li>Condizioni <strong>Eque</strong> per i Lavoratori</li>'
|
||||
+ '<li>Ridotto <strong>Impatto Ambientale</strong></ul>',
|
||||
},
|
||||
freeliving: {
|
||||
title: 'Free Co-Living',
|
||||
descr: 'Unire più realtà, condividendo l\'esperienza di abitare insieme, per un periodo definito:<br>'
|
||||
+ '1) C\'è chi <strong>Vive solo</strong> ed ha una casa.<br>'
|
||||
+ '2) Chi ha bisogno di un <strong>alloggio</strong> temporaneo.<br><br>'
|
||||
+ 'Oggi sempre più persone <strong>abitano da sole</strong> e vorrebbero continuare a vivere nella propria abitazione.<br>'
|
||||
+ 'Altre persone invece hanno bisogno di una <strong>stanza</strong>, per scelta o per necessita, ed in cambio sono disponibili a '
|
||||
+ '<strong>contribuire alle spese</strong> per le utenze domestiche o magari <strong>aiutare</strong> la persona a <strong>fare la spesa</strong>, cucinare, <strong>pulire casa</strong> oppure offrendogli semplicemente <strong>compagnia</strong>.<br><br>'
|
||||
+ 'Tramite questo strumento, le persone potranno trovarsi, mettersi in contatto e decidere in che forma <strong>co-abitare</strong> e per quanto tempo. Le <strong>recensioni</strong> rilasciate ed il <strong>dettaglio</strong> dei profili utenti, '
|
||||
+ 'aiuterà nella scelta della persona più in <strong>sintonia</strong>.',
|
||||
|
||||
},
|
||||
freecollabora: {
|
||||
title: 'Chi può Collaborare?',
|
||||
descr: 'Tutti coloro che sono in linea con <strong>Princìpi Etici</strong> e ricerca del <strong>Benessere Globale del Pianeta</strong><br>'
|
||||
+ 'Pertanto sono i benvenuti:'
|
||||
+ '<ul class="mylist" style="padding-left: 20px;">'
|
||||
+ '<li><strong>Associazioni no-profit, Ecovillaggi, Comunità</strong></li>'
|
||||
+ '<li>Gruppi che intendono promuovere <strong>Progetti Sociali Innovativi</strong> per una <strong>Decrescita Felice</strong></li>'
|
||||
+ '<li>Chi gestisce un <strong>Gruppo di Acquisto Solidale (G.A.S.)</strong></li>'
|
||||
+ '<li><strong>Produttori Locali Etici</strong></li>'
|
||||
+ '<li>Chi gestisce una <strong>Banca del Tempo</strong></li>'
|
||||
+ '<li><strong>Chiunque voglia partecipare</strong>, nella forma che ritiene più opportuna.</li>'
|
||||
+ '</ul>',
|
||||
},
|
||||
freesostieni: {
|
||||
title: 'Come Sostenere il progetto?',
|
||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||
+ '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
||||
+ '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>'
|
||||
+ '<li>Tramite una <strong>donazione</strong> (<strong>anche 1€</strong> ) per le spese.<br>'
|
||||
+ '</ul>'
|
||||
+ 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>',
|
||||
},
|
||||
multiplatform: {
|
||||
title: 'Multi-piattaforma',
|
||||
descr: 'E\' compatibile con Google Chrome, Firefox, Safari, iOS, Android e PC. L\'Applicazione s\'installa facilmente, senza passare dallo store. '
|
||||
+ 'basta condividere il nome del sito <strong>www.freeplanet.app</strong>.<br>'
|
||||
+ 'Dopo la registrazione chiederà di aggiungerlo alla lista delle applicazioni e sullo sfondo',
|
||||
},
|
||||
free: {
|
||||
title: 'Gratuita, Open Source e Niente Pubblicità',
|
||||
descr: 'Questa App <strong>non è in vendita</strong>, non ha scopi commerciali, <strong>non ha prezzo</strong> ed appartiene al <strong>Popolo del Nuovo Mondo</strong>.<br>Chiunque potrá utilizzarla e beneficiarne.<br>A me il compito di gestirla e proteggerla. '
|
||||
+ 'Verranno accettate solo donazioni Libere di privati ed Associazioni no-profit, in linea con i Principi, che serviranno per coprire le spese.<br>'
|
||||
+ '<strong>Grazie a Tutti per il sostegno</strong>. ',
|
||||
},
|
||||
contacts: 'Contatti',
|
||||
},
|
||||
},
|
||||
es: {
|
||||
pages: {
|
||||
home: 'Principal',
|
||||
SignUp: 'Nueva Cuenta',
|
||||
SignIn: 'Entrar',
|
||||
vreg: 'Verifica Reg',
|
||||
Test: 'Test',
|
||||
Category: 'Categorías',
|
||||
Todo: 'Tareas',
|
||||
personal: 'Personal',
|
||||
work: 'Trabajo',
|
||||
shopping: 'Compras',
|
||||
Admin: 'Administración',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
projects: 'Proyectos',
|
||||
},
|
||||
favproj: 'Favoritos',
|
||||
projall: 'Todos',
|
||||
projectsShared: 'Mis Compartidos',
|
||||
myprojects: 'Mis Personales',
|
||||
msg: {
|
||||
hello: 'Buenos Días',
|
||||
myAppName: 'FreePlanet',
|
||||
myAppDescription: 'El primer Verdadero Social Libre, justo y Solidario Donde vive Conciencia y Ayuda comunitaria, Gratis y sin publicidad',
|
||||
underconstruction: 'App en construcción...',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: 'El primer Verdadero Social',
|
||||
sottoTitoloApp2: 'Libre, justo y Solidario',
|
||||
sottoTitoloApp3: 'Donde vive Conciencia y Ayuda comunitaria',
|
||||
sottoTitoloApp4: 'Gratis y sin publicidad',
|
||||
},
|
||||
homepage: {
|
||||
descrapp_title1: 'Unidos para evolucionar y experimentar',
|
||||
descrapp_pag1: 'Redescubra cómo el valor de <strong>Compartir</strong> y <strong>Cooperación</strong> puede ayudarnos a encontrar el profundo '
|
||||
+ 'sentido de la <strong>Vida</strong>, perdido en esta sociedad consumista, y mostrando esos <strong>Principios Naturales Saludables</strong> y la <strong>Hermandad Humana</strong>'
|
||||
+ 'que toda la población antigua conocía bien.',
|
||||
descrapp_pag2: 'Ha llegado el momento de utilizar las nuevas herramientas <strong>tecnológicas</strong> en nuestro <strong>favor</strong>, para <strong>liberarnos</strong> '
|
||||
+ 'tan lentamente desde la <strong>esclavitud</strong> de <strong>"Trabaja para generar dinero"</strong> y transformando nuestra <strong>Capacidad</strong> en'
|
||||
+ '<strong>Recursos humanos</strong> para poder apoyar y vivir en <strong>Armonia</strong> con otros.',
|
||||
freesocial: {
|
||||
title: 'Free Social',
|
||||
descr: 'Una comunidad organizada por <strong>Categorías</strong>, donde puedes unirte a <strong>Grupos temáticos</strong>, '
|
||||
+ 'Compartir <strong>experiencias</strong> y combinar habilidades para organizar y apoyar <strong>proyectos innovadores</strong> para la gente.<br><br>'
|
||||
+ 'Los desarrollos <strong>éticos</strong> como <strong>:<br>Auto-producción</strong>, <strong>Sostenibilidad</strong>, '
|
||||
+ 'la Buena <strong>Salud natural</strong> y <strong>Respeto por el Medio Ambiente</strong> y para todos los <strong>Seres vivos</strong> de este'
|
||||
+ '<strong>Planeta</strong>. Cualquiera puede expresar su <strong>consentimiento o disidencia</strong> participando en <strong>Encuestas Interactivas</strong> '
|
||||
+ 'y llevar a cabo juntos los <strong>Cambios</strong> necesarios para nuestra sociedad.',
|
||||
},
|
||||
freetalent: {
|
||||
title: 'Free Talent',
|
||||
descr: 'Comparte tus <strong>Talentos</strong> y <strong>Habilidades</strong>, '
|
||||
+ 'en lugar de dinero, ganarás <strong>Tiempo</strong>. <br>'
|
||||
+ '<strong>"1 hora"</strong> se convierte en una moneda de intercambio, igual para todos. <br>'
|
||||
+ 'Puedes usar estos <strong>"Créditos de tiempo"</strong> para satisfacer tus necesidades, buscando en <strong>Habilidades disponibles</strong>. <br> '
|
||||
+ 'En Dar y Recibir, crearemos así vínculos de <strong>Amistad, Solidaridad, Cooperación y Diversión</strong>. <br> <br>'
|
||||
+ 'Este proyecto apunta a difundir esta realidad, que ya existe desde hace muchos años y se llama <strong>"Banco de tiempo"</strong>. '
|
||||
+ 'Las <strong>secretarías</strong> dispersas por todo el mundo, servirán para dar mayor <strong>fiabilidad</strong> y <strong>confianza</strong> en el intercambio de talentos entre personas desconocidas. '
|
||||
+ 'Así crearemos una <strong>red de confianza</strong> en el vecindario, como ya se practica en numerosos <strong>Ecoaldeas</strong> y en la Comunidades del mundo.',
|
||||
},
|
||||
freegas: {
|
||||
title: 'Free G.A.S. (G.C.S.)',
|
||||
descr: '¿Le gustaría usar una aplicación que le permita comprar productos locales directamente desde el <strong>Productor</strong>? <br> '
|
||||
+ 'Con <strong>Grupos de Compra Solidarios</strong> evitamos intermediarios innecesarios, obteniendo muchos beneficios, incluyendo: <br>'
|
||||
+ '<ul class = "mylist" style = "padding-left: 20px;"> <li> <strong>Superior Quality</strong> del producto </li>'
|
||||
+ '<li> Opiniones <strong>de consumidores</strong> favorecerá a los productores con intenciones saludables </li>'
|
||||
+ '<li> Posibilidad de interactuar con el Productor </li>'
|
||||
+ '<li> Abierto a relaciones entre personas, compartiendo <strong>Recetas</strong> y <strong>Consejos</strong> preciosos </li>'
|
||||
+ '<li> <strong>Ahorros</strong> de dinero (precios al por mayor) </li>'
|
||||
+ '<li> Mejorando el <strong>Territorio</strong> y la Economía <strong>Local</strong> </li>'
|
||||
+ '<li> Condiciones <strong>Justa</strong> para Trabajadores </li>'
|
||||
+ '<li> Reducido <strong>Impacto Ambiental</strong> </ul>',
|
||||
},
|
||||
freeliving: {
|
||||
title: 'Free Co-Living',
|
||||
descr: 'Para unir más realidad, compartiendo la experiencia de vivir juntos, por un período definido: <br> '
|
||||
+ '1) Hay quien <strong>vive solo</strong> y tiene un hogar. <br>'
|
||||
+ '2) Quién necesita un alojamiento <strong>temporal</strong>. <br><br>'
|
||||
+ 'Hoy en día, más y más personas <strong>viven solas</strong> y les gustaría seguir viviendo en sus propios hogares. <br>'
|
||||
+ 'Otras personas necesitan una <strong>Habitación</strong>, por elección o por necesidad, y a cambio están disponibles en'
|
||||
+ '<strong>contribuir a los gastos</strong> para los billetes de casa o tal vez <strong>ayuda</strong> a la persona mayor para <strong>ir de compras</strong>, cocinar, <strong>limpiar casa</strong> o simplemente ofreciéndole <strong>compañía</strong>. <br><br> '
|
||||
+ 'A través de esta herramienta, las personas pueden ponerse en contacto y decidir en qué forma <strong>co-habitar</strong>. Los <strong>comentarios</strong> publicados y el <strong>detalle</strong> de los perfiles de usuario, '
|
||||
+ 'ayudará a elegir a la persona más en <strong>armonía</strong>.',
|
||||
|
||||
},
|
||||
freecollabora: {
|
||||
title: '¿Quién puede colaborar?',
|
||||
descr: 'Todos aquellos que están en línea con <strong>Principios éticos</strong> y la investigación de <strong>Bienestar Global del Planeta</strong> <br> '
|
||||
+ 'Por eso son bienvenidos:'
|
||||
+ '<ul class = "mylist" style = "padding-left: 20px;">'
|
||||
+ '<li> <strong>Asociaciones sin ánimo de lucro, Ecoaldeas, Comunidades</strong> </li>'
|
||||
+ '<li> Grupos que desean promover <strong>Proyectos sociales innovadores</strong> para <strong>Feliz Decrecimiento</strong> </li>'
|
||||
+ '<li> Quién administra un <strong>Grupo de Compra Solidario (G.C.S.)</strong> </li>'
|
||||
+ '<li><strong>Productores locales Éticos</strong></li>'
|
||||
+ '<li> Quién administra un <strong>Banco de Tiempo</strong> </li>'
|
||||
+ '<li> <strong>Cualquier persona que quiera participar</strong>, en la forma que considere más apropiada. </li>'
|
||||
+ '</ul>',
|
||||
},
|
||||
freesostieni: {
|
||||
title: '¿Cómo apoyar el proyecto?',
|
||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||
+ '<li> <strong>Compartiéndolo</strong> a todos aquellos que quieran unirse en el crecimiento y desarrollo de una Nueva Era </li> '
|
||||
+ '<li> Respondiendo a <strong>Encuestas populares</strong> y dejando <strong>Comentarios</strong> </li>'
|
||||
+ '<li> A través de una <strong>donación</strong> (<strong>incluso € 1</strong>) para los gastos. <br>'
|
||||
+ '</ul>'
|
||||
+ '<br>Veo un <strong>futuro</strong> en el que ya no usarás dinero. Donde las personas <strong>se ayudarán unos a otros</strong> y no necesiten "poseer" cosas, pero <strong>compartirán</strong> con otros. <br> ',
|
||||
},
|
||||
multiplatform: {
|
||||
title: 'Multi-plataforma',
|
||||
descr: 'Compatible con Google Chrome, Firefox, Safari, iOS, Android y PC. La aplicación se instala fácilmente, sin pasar por el store. '
|
||||
+ 'para compartirlo, necesita solo el nombre del sitio web: <strong>www.freeplanet.app</strong>.<br>'
|
||||
+ 'Después del registro, le pedirá que lo agregue a la lista de aplicaciones y en la pantalla.',
|
||||
},
|
||||
free: {
|
||||
title: 'Libre, Código Abierto y Sin Publicidad',
|
||||
descr: 'Esta aplicación <strong>no está a la venta</strong>, no tiene un propósito comercial, <strong>no tiene precio</strong> y pertenece a <strong>la Gente del Nuevo Mundo</strong>.<br>'
|
||||
+ 'Cualquiera puede usarla y beneficiarse.<br> A mí la tarea de gestionarlo y protegerlo. '
|
||||
+ 'Solo se aceptarán donaciones de particulares y asociaciones sin änimo de lucro, en línea con los Principios, que se utilizarán para cubrir los gastos. <br>'
|
||||
+ '<strong>Gracias a todos por el apoyo</strong>. ',
|
||||
},
|
||||
contacts: 'Contactos',
|
||||
},
|
||||
},
|
||||
enUs: {
|
||||
pages: {
|
||||
home: 'Dashboard',
|
||||
SignUp: 'SignUp',
|
||||
SignIn: 'SignIn',
|
||||
vreg: 'Verify Reg',
|
||||
Test: 'Test',
|
||||
Category: 'Category',
|
||||
Todo: 'Todo',
|
||||
personal: 'Personal',
|
||||
work: 'Work',
|
||||
shopping: 'Shopping',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
projects: 'Projects',
|
||||
},
|
||||
favproj: 'Favorite',
|
||||
projall: 'All',
|
||||
projectsShared: 'My Shared',
|
||||
myprojects: 'My Personals',
|
||||
msg: {
|
||||
hello: 'Hello!',
|
||||
myAppName: 'FreePlanet',
|
||||
myAppDescription: 'The first Real Social Free, Fair and Equitable Where the conscience and community help live. Free and without advertising',
|
||||
underconstruction: 'App in construction...',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: 'The first Real Social',
|
||||
sottoTitoloApp2: 'Free, Fair and Equitable',
|
||||
sottoTitoloApp3: 'Where the conscience and community help live',
|
||||
sottoTitoloApp4: 'Free and without advertising',
|
||||
},
|
||||
homepage: {
|
||||
descrapp_title1: 'Together to Evolve and Experiment',
|
||||
descrapp_pag1: 'Rediscover how the value of <strong>Sharing</strong> and <strong>Cooperation</strong>, can help us find the deep meaning of'
|
||||
+ '<strong>Life</strong>, lost in this consumer society, and showing those <strong>Healthy Natural Principles</strong> and Human <strong>Brotherhood</strong>'
|
||||
+ 'that entire ancient populations knew well.',
|
||||
descrapp_pag2: 'The time has come to use the new <strong>Technological</strong> tools in our <strong>favor</strong>, to <strong>Free ourselves</strong> '
|
||||
+ 'so slowly from the <strong>slavery</strong> of the <strong>"Work to generate Money"</strong> and transforming our <strong>Capacity</strong> into'
|
||||
+ '<strong>Human Resources</strong> to be able to support and live in <strong>Harmony</strong> with others.',
|
||||
freesocial: {
|
||||
title: 'Free Social',
|
||||
descr: 'A Community organized by <strong>Categories</strong>, where you can join <strong>Thematic Groups</strong>, '
|
||||
+ 'Share <strong>Experiences</strong> and combine Skills to organize and support <strong>Innovative Projects</strong> for the People.<br><br>'
|
||||
+ '<strong>Ethical</strong> developments such as <strong>Auto-Production</strong>, <strong>Sustainability</strong>, '
|
||||
+ 'Good <strong>Natural Health</strong> and <strong>Respect for the Environment</strong> and for all <strong>Living Beings</strong> of this'
|
||||
+ '<strong>Planet</strong>. Anyone can express their <strong>Consent or Dissent</strong> by participating in <strong>Interactive Surveys</strong> '
|
||||
+ 'and carry out together the <strong>Changes</strong> needed for our society.',
|
||||
},
|
||||
freetalent: {
|
||||
title: 'Free Talent',
|
||||
descr: 'Share your <strong>Talents</strong> and <strong>Skills</strong>, '
|
||||
+ 'instead of money, you\'ll earn <strong>Time</strong>. <br>'
|
||||
+ '<strong>"1 hour"</strong> becomes a currency of exchange, equal for all. <br>'
|
||||
+ 'You can use these <strong>"Time Credits"</strong> to meet your needs, looking in <strong>Available Skills</strong>. <br>'
|
||||
+ 'In Giving and Receiving, we will thus create bonds of <strong>Friendship, Solidarity, Cooperation and Enjoyment</strong> <br> <br>'
|
||||
+ 'This project aims to spread this reality, which already exists for many years and is called <strong>"Time Bank"</strong>. '
|
||||
+ 'The <strong>secretariats</strong> in all over the world, will serve an extra to give greater <strong>reliability</strong> and <strong>trust</strong> in the exchange of talents between unknown people. '
|
||||
+ 'We will thus create a <strong>trust network</strong> in the neighborhood, as is already practiced in numerous <strong>Ecovillages</strong> and Community of the world. ',
|
||||
},
|
||||
freegas: {
|
||||
title: 'Free G.A.S.',
|
||||
descr: 'Would you like to use an App that allows you to easily Buy Local Products directly from <strong>Manufacturer</strong>? <br> '
|
||||
+ 'With <strong>Solidarity Purchase Groups</strong> (in Italian: "Gruppo di Aacquisto Solidale") we avoid unnecessary intermediaries, obtaining many benefits including: <br>'
|
||||
+ '<ul class="mylist" style="padding-left: 20px;"> <li> <strong>Superior Quality</strong> of the product </li>'
|
||||
+ '<li> Consumer <strong>Reviews</strong> will favor Producers with Healthy Intents </li>'
|
||||
+ '<li> Possibility to interact with the Producer </li>'
|
||||
+ '<li> Open to Relations between people, sharing <strong>Recipes</strong> and precious <strong>Tips</strong> </li>'
|
||||
+ '<li> <strong>Savings</strong> money (wholesale prices) </li>'
|
||||
+ '<li> Enhancing the <strong>Territory</strong> and the <strong>Local Economy</strong> </li>'
|
||||
+ '<li> <strong>Fair Conditions</strong> for Workers </li>'
|
||||
+ '<li> Reduced <strong>Environmental Impact</strong> </ul>',
|
||||
},
|
||||
freeliving: {
|
||||
title: 'Free Co-Living',
|
||||
descr: 'Join more reality, sharing the experience of living together, for a defined period: <br> '
|
||||
+ '1) Someone <strong>Lives alone</strong> and has a house. <br>'
|
||||
+ '2) Who needs a temporary <strong> accommodation </strong>. <br><br>'
|
||||
+ 'Today more and more people <strong> live alone </strong> and would like to continue living in their own house. <br>'
|
||||
+ 'Other people instead need a <strong>room</strong>, by choice or by necessity, and in return they are available to'
|
||||
+ '<strong>contribute to expenses</strong> for households or maybe <strong>help</strong> to <strong>go shopping</strong>, cooking, <strong>cleaning house</strong> or simply offering him <strong>companionship</strong>. <br> '
|
||||
+ 'Through this tool, people can get in touch and decide in which way <strong>co-living</strong>. The <strong>reviews</strong> released and the <strong>detail</strong> of user profiles, '
|
||||
+ 'will help in <strong>choosing</strong> the person more in <strong>tune</strong>.',
|
||||
|
||||
},
|
||||
freecollabora: {
|
||||
title: 'Who can collaborate?',
|
||||
descr: 'All those who are in line with <strong>Ethical Principles</strong> and research of <strong>Global Wellness of the Planet</strong> <br> '
|
||||
+ 'Therefore they are welcome:'
|
||||
+ '<ul class = "mylist" style = "padding-left: 20px;">'
|
||||
+ '<li> <strong>Non-profit associations, Ecovillages, Communities</strong> </li>'
|
||||
+ '<li> Groups that want to promote <strong>Innovative Social Projects</strong> for <strong>Happy Degrowth</strong> </li>'
|
||||
+ '<li> Who manages a <strong>Solidarity Purchase Group</strong> </li>'
|
||||
+ '<li><strong>Local Ethical Producers</strong></li>'
|
||||
+ '<li> Who manages a <strong>Time Bank</strong> </li>'
|
||||
+ '<li> <strong>Anyone who wants to participate</strong>, in the form it considers most appropriate. </li>'
|
||||
+ '</ul>',
|
||||
},
|
||||
freesostieni: {
|
||||
title: 'How to support the project?',
|
||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||
+ '<li> <strong>Sharing it</strong> to all those who want to join together in the growth and development of a New Era </li> '
|
||||
+ '<li> Answering to <strong>Popular Polls</strong> and leaving <strong>Feedback</strong> </li>'
|
||||
+ '<li> Through a <strong>donation</strong> (<strong>even $ 1</strong>) for expenses. <br>'
|
||||
+ '</ul><br>'
|
||||
+ 'I see a <strong>future</strong> where you will no longer use money. Where people <strong>will help each other</strong> and won\'t need to "own" things, but <strong>will share</strong> with others. <br> ',
|
||||
},
|
||||
multiplatform: {
|
||||
title: 'Multi-platform',
|
||||
descr: 'It is compatible with Google Chrome, Firefox, Safari, iOS, Android and PC. The Application is easily installed, without going through the store. '
|
||||
+ 'just share the nametranslate of this site <strong>www.freeplanet.app</strong>.<br>'
|
||||
+ 'After registration it will ask to be added to the application list and in the screen',
|
||||
},
|
||||
free: {
|
||||
title: 'Free, Open Source and No Advertising',
|
||||
descr: 'This App <strong>is not for sale</strong>, has no commercial purpose, <strong>is priceless</strong> and belongs to the <strong>New World People</strong>.'
|
||||
+ '<br>Anyone can use it and benefit from it.<br>To me the task of managing it and protecting it. '
|
||||
+ 'Only donations from private individuals and non-profit associations will be accepted, in line with the Principles, which will be used to cover the expenses. <br>'
|
||||
+ '<strong>Thanks all for the support</strong>. ',
|
||||
},
|
||||
contacts: 'Contacts',
|
||||
},
|
||||
},
|
||||
fr: {
|
||||
pages: {
|
||||
|
||||
},
|
||||
msg: {
|
||||
|
||||
},
|
||||
|
||||
},
|
||||
de: {
|
||||
pages: {
|
||||
|
||||
},
|
||||
msg: {
|
||||
|
||||
},
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
export default msg_website;
|
||||
85
src/db/lang/ws_de.js
Executable file
85
src/db/lang/ws_de.js
Executable file
@@ -0,0 +1,85 @@
|
||||
const msg_website_de = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Profilo',
|
||||
payment: 'Pagamenti',
|
||||
regok: 'Registrazione Confermata',
|
||||
presentazione: 'Presentazione',
|
||||
presentazione2: 'Presentazione',
|
||||
invita: 'Invita Persone',
|
||||
SignUp: 'Nuova Registrazione',
|
||||
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
|
||||
SignUp2: 'Registrazione',
|
||||
SignIn: 'Login',
|
||||
status: 'Statistiche',
|
||||
nextzoom: 'Conferenze',
|
||||
requestresetpwd: 'Richiesta Reset Password',
|
||||
vreg: 'Verifica Reg',
|
||||
dashboard: 'Lavagna',
|
||||
statoattuale: 'Stato Attuale',
|
||||
posizione_in_programmazione: 'Lista d\'Imbarco',
|
||||
posizione_in_nave: 'Lista Navi',
|
||||
nave: 'Nave',
|
||||
testimonial: 'Testimonianze',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
extralist: 'Lista Extra',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
chisiamo: 'Chi Siamo',
|
||||
linkamici: 'Link Amici',
|
||||
dovesiamo: 'Dove Siamo',
|
||||
evento: 'Evento',
|
||||
eventodef: 'Evento:',
|
||||
prova: 'prova',
|
||||
dbop: 'Operazioni',
|
||||
statusreg: {
|
||||
reg: 'Partecipanti',
|
||||
passeggeri: 'Passeggeri Navi',
|
||||
giainlista: 'Gia in Lista',
|
||||
newreg: 'Ultime Registrazioni:',
|
||||
nationality: 'Nazionalità',
|
||||
verified: 'Verificata',
|
||||
nonverified: 'Non Verificata',
|
||||
req7: 'Con 5 passi entri nella lista d\'Imbarco',
|
||||
req9: 'Con 7 passi aiuti {sitename} a Crescere!',
|
||||
req: 'Passi',
|
||||
people: 'Inv.',
|
||||
peoplelegend: 'Numero d\'Invitati',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '',
|
||||
sottoTitoloApp2: '',
|
||||
sottoTitoloApp3: '',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
nostra_missione: 'Nostra Missione',
|
||||
associazione: '',
|
||||
tit_come_associarsi: 'Come Associarsi',
|
||||
testo_come_associarsi: '',
|
||||
titlecontatti: 'CONTATTI',
|
||||
},
|
||||
text: {
|
||||
videotitle: 'VIDEO',
|
||||
how: 'COME FUNZIONA',
|
||||
what: 'COSA TI SERVE',
|
||||
step: 'PASSI DA COMPIERE',
|
||||
testimonial: 'TESTIMONIANZE',
|
||||
faq: 'DOMANDE FREQUENTI (FAQ)',
|
||||
advise: 'SUGGERIMENTI',
|
||||
download: 'MATERIALE DISPONIBILE',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_de;
|
||||
73
src/db/lang/ws_enUs.js
Executable file
73
src/db/lang/ws_enUs.js
Executable file
@@ -0,0 +1,73 @@
|
||||
const msg_website_enUs = {
|
||||
ws: {
|
||||
sitename: 'Comunità Nuovo Mondo',
|
||||
siteshortname: 'CNM',
|
||||
botname: 'CNM BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Profile',
|
||||
payment: 'Payments',
|
||||
regok: 'Registration Confirmed',
|
||||
presentazione: 'Presentation',
|
||||
presentazione2: 'Presentation',
|
||||
invita: 'Invite People',
|
||||
SignUp: 'Registration',
|
||||
SignUp_alreadylista: 'Registration for those who are already in the List!',
|
||||
SignUp2: 'Registration',
|
||||
SignIn: 'Login',
|
||||
status: 'Current state',
|
||||
nextzoom: 'Conferences',
|
||||
requestresetpwd: 'Password Reset Request',
|
||||
vreg: 'Check Registration',
|
||||
dashboard: 'Dashboard',
|
||||
statoattuale: 'Current Status',
|
||||
posizione_in_programmazione: 'Boarding List',
|
||||
posizione_in_nave: 'Ships List',
|
||||
nave: 'Ship',
|
||||
testimonial: 'Reviews',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
statusreg: {
|
||||
reg: 'Participants',
|
||||
passeggeri: 'Passengers Ships',
|
||||
giainlista: 'Already in the List',
|
||||
newreg: 'New registrations:',
|
||||
nationality: 'Nationality',
|
||||
verified: 'Verified',
|
||||
nonverified: 'Not Verified',
|
||||
req7: 'With 5 steps you enter the boarding list.',
|
||||
req9: 'With 7 steps help {sitename} to grow!',
|
||||
req: 'Steps',
|
||||
people: 'Gue.',
|
||||
peoplelegend: 'Number of guests',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '..',
|
||||
sottoTitoloApp2: '..',
|
||||
sottoTitoloApp3: '..',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTS',
|
||||
},
|
||||
text: {
|
||||
how: 'HOW TO WORK',
|
||||
what: 'WHAT YOU NEED',
|
||||
step: 'STEPS TO DO',
|
||||
videotitle: 'VIDEO',
|
||||
testimonial: 'REVIEWS',
|
||||
faq: 'FREQUENTLY ASKED QUESTIONS (FAQ)',
|
||||
advise: 'ADVISE',
|
||||
download: 'AVAILABLE DOCUMENTS',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_enUs;
|
||||
73
src/db/lang/ws_es.js
Executable file
73
src/db/lang/ws_es.js
Executable file
@@ -0,0 +1,73 @@
|
||||
const msg_website_es = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Perfil',
|
||||
payment: 'Paiements',
|
||||
regok: 'Registro confirmado',
|
||||
presentazione: 'Presentación',
|
||||
presentazione2: 'Presentación',
|
||||
invita: 'Invitar a la gente',
|
||||
SignUp: 'Registro',
|
||||
SignUp_alreadylista: 'Inscripción para los que ya están en la Lista!',
|
||||
SignUp2: 'Registro',
|
||||
SignIn: 'Login',
|
||||
status: 'Estadísticas',
|
||||
nextzoom: 'Conferencias',
|
||||
requestresetpwd: 'Solicitud de restablecimiento de contraseña',
|
||||
vreg: 'Verifica Reg',
|
||||
dashboard: 'Tablero',
|
||||
statoattuale: 'Estado Actual',
|
||||
posizione_in_programmazione: 'Lista de embarque',
|
||||
posizione_in_nave: 'Lista de Naves',
|
||||
nave: 'Nave',
|
||||
testimonial: 'Opiniones',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
statusreg: {
|
||||
reg: 'Participantes',
|
||||
passeggeri: 'Barcos de pasajeros',
|
||||
giainlista: 'Gia in Lista',
|
||||
newreg: 'Nuevas inscripciones :',
|
||||
nationality: 'Nacionalidad',
|
||||
verified: 'Verificada',
|
||||
nonverified: 'No Verificada',
|
||||
req7: 'Con 5 pasos usted entra en la lista de embarque',
|
||||
req9: 'Con 7 pasos ayuda a {sitename} a crecer!',
|
||||
req: 'Pasos',
|
||||
people: 'Inv.',
|
||||
peoplelegend: 'Número de invitados',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '..',
|
||||
sottoTitoloApp2: '..',
|
||||
sottoTitoloApp3: '..',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTOS',
|
||||
},
|
||||
text: {
|
||||
how: 'COMO FUNCIONA',
|
||||
what: 'QUE NECESITAS',
|
||||
step: 'PASOS A REALIZAR',
|
||||
videotitle: 'VIDEO',
|
||||
testimonial: 'TESTIMONIOS',
|
||||
faq: 'PREGUNTAS FRECUENTES (FAQ)',
|
||||
advise: 'CONSEJOS',
|
||||
download: 'MATERIAL DISPONIBLES',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_es;
|
||||
63
src/db/lang/ws_fr.js
Executable file
63
src/db/lang/ws_fr.js
Executable file
@@ -0,0 +1,63 @@
|
||||
const msg_website_fr = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTS',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'profil',
|
||||
payment: 'paiements',
|
||||
regok: 'Inscription confirmée',
|
||||
presentazione: 'Présentation',
|
||||
presentazione2: 'Présentation',
|
||||
invita: 'Inviter des personnes',
|
||||
SignUp: 'Inscription',
|
||||
SignUp_alreadylista: 'Inscription pour ceux qui sont déjà inscrits sur la liste!',
|
||||
SignUp2: 'Inscription',
|
||||
SignIn: 'Login',
|
||||
status: 'État actuel',
|
||||
nextzoom: 'Conférences',
|
||||
requestresetpwd: 'Demande de réinitialisation du mot de passe',
|
||||
vreg: 'Vérifier l\'inscription',
|
||||
dashboard: 'Tableau de bord',
|
||||
statoattuale: 'Situation Actuelle',
|
||||
posizione_in_programmazione: 'Liste d\'embarquement',
|
||||
posizione_in_nave: 'Liste des Navires',
|
||||
nave: 'Navires',
|
||||
testimonial: 'Commentaires',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
statusreg: {
|
||||
reg: 'Participants',
|
||||
passeggeri: 'Navires à passagers',
|
||||
giainlista: 'Gia in Lista',
|
||||
newreg: 'Nouvelles inscriptions:',
|
||||
nationality: 'Nationalité',
|
||||
verified: 'Vérifié',
|
||||
nonverified: 'Non Vérifié',
|
||||
req7: 'Avec 5 étapes, vous entrez dans la liste d\'embarquement.',
|
||||
req9: 'Avec 7 étapes, aidez {sitename} à se développer !',
|
||||
req: 'Étapes',
|
||||
people: 'Inv.',
|
||||
peoplelegend: 'Nombre d\'invités',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '..',
|
||||
sottoTitoloApp2: '..',
|
||||
sottoTitoloApp3: '..',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_fr;
|
||||
122
src/db/lang/ws_it.js
Executable file
122
src/db/lang/ws_it.js
Executable file
@@ -0,0 +1,122 @@
|
||||
const msg_website_it = {
|
||||
ws: {
|
||||
sitename: 'Prima APP',
|
||||
siteshortname: 'Prima APP',
|
||||
botname: 'Prima APP',
|
||||
},
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
quantityAvailable: 'Disponibili',
|
||||
weight: 'Peso',
|
||||
stars: 'Voto',
|
||||
},
|
||||
hours: {
|
||||
descr: 'Descrizione',
|
||||
date: 'Data',
|
||||
time_start: 'Ora Inizio',
|
||||
time_end: 'Ora Fine',
|
||||
hours: 'Ore',
|
||||
note: 'Note Extra',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Profilo',
|
||||
projects: 'Progetti',
|
||||
report: 'Report Ore',
|
||||
producer: 'Produttore',
|
||||
orderinfo: 'Ordini Effettuati',
|
||||
products: 'Prodotti',
|
||||
productslist: 'Lista Prodotti',
|
||||
collabora: 'Collabora',
|
||||
storehouses: 'Magazzino',
|
||||
departments: 'Uffici',
|
||||
orders: 'Ordini Ricevuti',
|
||||
orders2: 'Ordini Ricevuti',
|
||||
sharewithus: 'Condividi con Noi',
|
||||
checkout: 'Carrello',
|
||||
payment: 'Pagamenti',
|
||||
regok: 'Registrazione Confermata',
|
||||
presentazione: 'Presentazione',
|
||||
presentazione2: 'Presentazione',
|
||||
invita: 'Invita Persone',
|
||||
SignUp: 'Nuova Registrazione',
|
||||
SignUpIscrizione: 'Diventa Socio CNM',
|
||||
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
|
||||
SignUp2: 'Registrazione',
|
||||
SignIn: 'Login',
|
||||
status: 'Statistiche',
|
||||
nextzoom: 'Conferenze',
|
||||
requestresetpwd: 'Richiesta Reset Password',
|
||||
vreg: 'Verifica Reg',
|
||||
dashboard: 'Lavagna',
|
||||
statoattuale: 'Stato Attuale',
|
||||
posizione_in_programmazione: 'Lista d\'Imbarco',
|
||||
posizione_in_nave: 'Lista Navi',
|
||||
nave: 'Nave',
|
||||
testimonial: 'Testimonianze',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
Sites: 'Siti Web',
|
||||
extralist: 'Lista Extra',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
chisiamo: 'Chi Siamo',
|
||||
linkamici: 'Link Amici',
|
||||
dovesiamo: 'Dove Siamo',
|
||||
calendarioeventi: 'Calendario Eventi',
|
||||
evento: 'Evento',
|
||||
eventodef: 'Evento:',
|
||||
prova: 'prova',
|
||||
dbop: 'Operazioni',
|
||||
projall: 'Comunitari',
|
||||
groups: 'Lista Gruppi',
|
||||
projectsShared: 'Condivisi da me',
|
||||
myprojects: 'Privati',
|
||||
favproj: 'Favoriti',
|
||||
statusreg: {
|
||||
reg: 'Partecipanti',
|
||||
passeggeri: 'Passeggeri Navi',
|
||||
giainlista: 'Gia in Lista',
|
||||
newreg: 'Ultime Registrazioni:',
|
||||
nationality: 'Nazionalità',
|
||||
nationality_born: 'Nazione di Nascita',
|
||||
verified: 'Verificata',
|
||||
nonverified: 'Non Verificata',
|
||||
req7: 'Con 5 passi entri nella lista d\'Imbarco',
|
||||
req9: 'Con 7 passi aiuti {sitename} a Crescere!',
|
||||
req: 'Passi',
|
||||
people: 'Inv.',
|
||||
peoplelegend: 'Numero d\'Invitati',
|
||||
},
|
||||
admin_ecommerce: 'ECommerce',
|
||||
ecommerce: 'Prodotti',
|
||||
ecommerce_menu: 'ECommerce1',
|
||||
hours: 'Ore',
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: 'Il primo Vero Social',
|
||||
sottoTitoloApp2: '',
|
||||
sottoTitoloApp3: '',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
descrapp_title1: 'Uniti per Evolvere e Sperimentare',
|
||||
descrapp_pag1: 'Riscopri come il valore della <strong>Condivisione</strong> e della <strong>Cooperazione</strong>, possa aiutarci a ritrovare il profondo '
|
||||
+ 'senso della <strong>Vita</strong>, perduto in questa società consumista, e riporti quei <strong>Sani Pricìpi Naturali</strong> ed Umani di <strong>Fratellanza</strong>'
|
||||
+ ' che intere popolazioni antiche conoscevano bene.',
|
||||
descrapp_pag2: 'E\' giunta l\'ora di utilizzare i nuovi strumenti <strong>Tecnologici</strong> a nostro <strong>favore</strong>, per <strong>Liberarci</strong> '
|
||||
+ 'così piano piano dalla <strong>schiavitù</strong> del <strong>"Lavoro per generare Denaro"</strong> e trasformando le nostre <strong>Capacitá</strong> in '
|
||||
+ '<strong>Risorse Umane</strong> per poterci sostenere e vivere in <strong>Armonia</strong> con gli altri.',
|
||||
nostra_missione: 'Nostra Missione',
|
||||
associazione: '',
|
||||
tit_come_associarsi: 'Come Associarsi',
|
||||
testo_come_associarsi: '',
|
||||
titlecontatti: 'CONTATTI',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_it;
|
||||
73
src/db/lang/ws_pt.js
Executable file
73
src/db/lang/ws_pt.js
Executable file
@@ -0,0 +1,73 @@
|
||||
const msg_website_pt = {
|
||||
ws: {
|
||||
sitename: 'CNM',
|
||||
siteshortname: 'CNM',
|
||||
botname: 'CNM BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Perfil',
|
||||
payment: 'Pagamentos',
|
||||
regok: 'Inscrição confirmada',
|
||||
presentazione: 'Apresentação',
|
||||
presentazione2: 'Apresentação',
|
||||
invita: 'Convidar Pessoas',
|
||||
SignUp: 'Inscrição',
|
||||
SignUp_alreadylista: 'Inscrição para os que já estão na Lista!',
|
||||
SignUp2: 'Inscrição',
|
||||
SignIn: 'Login',
|
||||
status: 'Estatísticas',
|
||||
nextzoom: 'Conférences',
|
||||
requestresetpwd: 'Pedido de redefinição de senha',
|
||||
vreg: '',
|
||||
dashboard: 'Tablero',
|
||||
statoattuale: 'Status Atual',
|
||||
posizione_in_programmazione: 'Lista de Embarque',
|
||||
posizione_in_nave: 'Lista de Navios',
|
||||
nave: 'Navios',
|
||||
testimonial: 'Opiniones',
|
||||
Test: 'Test',
|
||||
Category: 'Categorie',
|
||||
Admin: 'Admin',
|
||||
Test1: 'Test1',
|
||||
Test2: 'Test2',
|
||||
statusreg: {
|
||||
reg: 'Participantes',
|
||||
passeggeri: 'Navios de Passageiros',
|
||||
giainlista: 'Já na lista',
|
||||
newreg: 'Últimas Inscrições:',
|
||||
nationality: 'Nacionalidade',
|
||||
verified: 'Verificado',
|
||||
nonverified: 'Não verificado',
|
||||
req7: 'Com 5 passos, o usuário entra na lista de embarque.',
|
||||
req9: 'Com 7 passos ajudam a {sitename} a crescer!',
|
||||
req: 'Passos',
|
||||
people: 'Con.',
|
||||
peoplelegend: 'Número de convidados',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '..',
|
||||
sottoTitoloApp2: '..',
|
||||
sottoTitoloApp3: '..',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTOS',
|
||||
},
|
||||
text: {
|
||||
how: 'COMO FUNCIONA',
|
||||
what: 'QUE NECESITAS',
|
||||
step: 'PASOS A REALIZAR',
|
||||
videotitle: 'VIDEO',
|
||||
testimonial: 'TESTIMONIOS',
|
||||
faq: 'PREGUNTAS FRECUENTES (FAQ)',
|
||||
advise: 'CONSEJOS',
|
||||
download: 'MATERIAL DISPONIBLES',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_pt;
|
||||
59
src/db/lang/ws_si.js
Executable file
59
src/db/lang/ws_si.js
Executable file
@@ -0,0 +1,59 @@
|
||||
const msg_website_si = {
|
||||
ws: {
|
||||
sitename: 'AYNI',
|
||||
siteshortname: 'Ayni',
|
||||
botname: 'AYNI BOT',
|
||||
},
|
||||
pages: {
|
||||
home: 'Domača stran',
|
||||
profile: 'Profil',
|
||||
payment: 'Plačila',
|
||||
regok: 'Registracija potrjena',
|
||||
presentazione: 'Predstavitev',
|
||||
presentazione2: 'Predstavitev',
|
||||
invita: 'Povabi osebe',
|
||||
SignUp: 'Nova Registracija',
|
||||
SignUp2: 'Registracija',
|
||||
SignIn: 'Vpis',
|
||||
status: 'Statistika',
|
||||
nextzoom: 'Conferenze',
|
||||
requestresetpwd: 'Prošnja za ponastavitev Gesla',
|
||||
vreg: 'Preveri Registracijo',
|
||||
dashboard: 'Tabla',
|
||||
statoattuale: 'TrenutniStatus',
|
||||
posizione_in_programmazione: 'Seznam Plovbe',
|
||||
posizione_in_nave: 'Seznam Ladiji',
|
||||
nave: 'Ladje',
|
||||
Admin: 'Administrator',
|
||||
evento: 'Dogodek',
|
||||
eventodef: 'Dogodek:',
|
||||
statusreg: {
|
||||
reg: 'Udeleženci',
|
||||
passeggeri: 'Potniki Ladjic',
|
||||
giainlista: 'Že na seznamu',
|
||||
newreg: 'Zadnje Registracije:',
|
||||
nationality: 'Nacionalnost',
|
||||
verified: 'Preveri',
|
||||
nonverified: 'Ni preverjeno',
|
||||
req7: 'S 7 koraki vstopis na seznam za plovbo',
|
||||
req9: 'Z 9-imi koraki pomagaš, da {sitename} Raste!',
|
||||
req: 'Koraki',
|
||||
people: 'Pov.',
|
||||
peoplelegend: 'Število \'Povabljenih',
|
||||
},
|
||||
},
|
||||
msg: {
|
||||
myAppDescription: '',
|
||||
keywords_base: '',
|
||||
myDescriz: '',
|
||||
sottoTitoloApp: '',
|
||||
sottoTitoloApp2: '',
|
||||
sottoTitoloApp3: '',
|
||||
sottoTitoloApp4: '',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'Kontakt',
|
||||
},
|
||||
};
|
||||
|
||||
export default msg_website_si;
|
||||
147
src/db/static_data.ts
Executable file
147
src/db/static_data.ts
Executable file
@@ -0,0 +1,147 @@
|
||||
import {
|
||||
IListRoutes,
|
||||
ILang,
|
||||
IFunctionality,
|
||||
IPreloadImages,
|
||||
} from '@model'
|
||||
|
||||
const functionality: IFunctionality = {
|
||||
PWA: true,
|
||||
SHOW_USER_MENU: true, // Cambiare con true
|
||||
SHOW_PROFILE: true,
|
||||
SHOW_REG_BUTTON: true,
|
||||
ENABLE_REGISTRATION: true, // Cambiare con true
|
||||
ENABLE_REG_AYNI: false,
|
||||
SHOW_NEWSLETTER: false,
|
||||
SHOW_ONLY_POLICY: false,
|
||||
ENABLE_TODOS_LOADING: true,
|
||||
ENABLE_PROJECTS_LOADING: true,
|
||||
SHOW_IF_IS_SERVER_CONNECTION: false,
|
||||
SHOW_MESSAGES: false,
|
||||
BOOKING_EVENTS: false,
|
||||
ENABLE_ECOMMERCE: true,
|
||||
ENABLE_REG_CNM: true,
|
||||
}
|
||||
|
||||
// const SHOW_PROJINTHEMENU = false
|
||||
//
|
||||
// let arrlistafavourite = []
|
||||
// let arrlistaprojtutti = []
|
||||
// let arrlistaprojmiei = []
|
||||
// if (SHOW_PROJINTHEMENU) {
|
||||
// arrlistaprojtutti = Projects.getters.listaprojects(RouteNames.projectsall)
|
||||
// arrlistaprojmiei = Projects.getters.listaprojects(RouteNames.myprojects)
|
||||
// arrlistafavourite = Projects.getters.listaprojects(RouteNames.favouriteprojects)
|
||||
// }
|
||||
// PROGETTI -> FAVORITI :
|
||||
|
||||
// if (arrlistafavourite.length > 0) {
|
||||
// arrMenu.push({
|
||||
// icon: 'favorite_border',
|
||||
// nametranslate: 'pages.' + RouteNames.favouriteprojects,
|
||||
// urlroute: RouteNames.favouriteprojects,
|
||||
// level_parent: 0.0,
|
||||
// level_child: 0.5,
|
||||
// routes2: arrlistafavourite,
|
||||
// idelem: ''
|
||||
// })
|
||||
// }
|
||||
|
||||
const routes_todo: IListRoutes[] = []
|
||||
const arrlista = [
|
||||
{ nametranslate: 'personal', description: 'personal' },
|
||||
{ nametranslate: 'work', description: 'work' },
|
||||
{ nametranslate: 'shopping', description: 'shopping' },
|
||||
]
|
||||
|
||||
const baseroutes: IListRoutes[] = [
|
||||
{
|
||||
order: 4,
|
||||
path: '/ciao',
|
||||
materialIcon: 'ciao',
|
||||
name: 'pages.ciao',
|
||||
component: () => import('@src/root/ciao/ciao.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
order: 5,
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/home/home.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
order: 6,
|
||||
path: '/b',
|
||||
faIcon: 'fa fa-list-alt',
|
||||
materialIcon: 'format_list_numbered',
|
||||
name: 'pages.Todo',
|
||||
routes2: routes_todo,
|
||||
level_parent: 0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
solotitle: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
order: 7,
|
||||
path: '/c',
|
||||
faIcon: 'fa fa-list-alt',
|
||||
materialIcon: 'next_week',
|
||||
name: 'pages.projects',
|
||||
// routes2: routes_projects,
|
||||
level_parent: 0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
solotitle: true,
|
||||
infooter: true,
|
||||
},
|
||||
// --- NOT IN MENU: ---
|
||||
/*{
|
||||
order: 8,
|
||||
path: '/policy',
|
||||
name: 'pages.policy',
|
||||
component: () => import('@src/root/policy/policy.vue'),
|
||||
},*/
|
||||
]
|
||||
|
||||
const arrLangUsed = [
|
||||
'it',
|
||||
'enUs',
|
||||
'es',
|
||||
]
|
||||
|
||||
const lang_available: ILang[] = [
|
||||
{
|
||||
label: 'Italiano', icon: 'fa-flag-it', value: 'it', image: '../public/images/it.png', short: 'IT',
|
||||
},
|
||||
{
|
||||
label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../public/images/gb.png', short: 'EN',
|
||||
},
|
||||
{
|
||||
label: 'Español', icon: 'fa-flag-es', value: 'es', image: '../public/images/es.png', short: 'ES',
|
||||
},
|
||||
// { label: 'Français', icon: 'fa-facebook', value: 'fr', image: '../public/images/fr.png', short: 'FR' }
|
||||
// { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../public/images/de.png', short: 'DE' },
|
||||
]
|
||||
|
||||
const preLoadImages: IPreloadImages[] = []
|
||||
|
||||
export const preloadedimages = []
|
||||
|
||||
export const routes = baseroutes
|
||||
|
||||
export const static_data = {
|
||||
baseroutes,
|
||||
routes,
|
||||
functionality,
|
||||
lang_available,
|
||||
preLoadImages,
|
||||
arrLangUsed,
|
||||
preloadedimages,
|
||||
}
|
||||
7
src/env.d.ts
vendored
Executable file
7
src/env.d.ts
vendored
Executable file
@@ -0,0 +1,7 @@
|
||||
declare namespace NodeJS {
|
||||
interface ProcessEnv {
|
||||
NODE_ENV: string;
|
||||
VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined;
|
||||
VUE_ROUTER_BASE: string | undefined;
|
||||
}
|
||||
}
|
||||
25
src/error-handler/backend.ts
Executable file
25
src/error-handler/backend.ts
Executable file
@@ -0,0 +1,25 @@
|
||||
// import { i18n } from '../boot/vue-i18n'
|
||||
import { Notify } from 'quasar'
|
||||
|
||||
export default (error: any) => {
|
||||
/*
|
||||
let message = this.$i18n.t('errors.backend.undefined')
|
||||
if (error.response.data.error && error.response.data.message) {
|
||||
message = error.response.data.message
|
||||
}
|
||||
|
||||
if (error.response.data.errors) {
|
||||
const errors = Object.keys(error.response.data.errors)
|
||||
message = error.response.data.errors[errors[0]][0]
|
||||
}
|
||||
|
||||
Notify.create({
|
||||
message,
|
||||
position: 'center'
|
||||
})
|
||||
|
||||
if (message === this.$i18n.t('errors.backend.undefined')) {
|
||||
console.log(error.response)
|
||||
}
|
||||
*/
|
||||
}
|
||||
24
src/error-handler/firebase.ts
Executable file
24
src/error-handler/firebase.ts
Executable file
@@ -0,0 +1,24 @@
|
||||
import { Notify } from 'quasar'
|
||||
import store from '../store'
|
||||
// import { i18n } from '../boot/vue-i18n'
|
||||
|
||||
export default (error: any) => {
|
||||
/*
|
||||
switch (error.code) {
|
||||
case 'messaging/notifications-blocked':
|
||||
case 'messaging/permission-blocked':
|
||||
store.commit('session/fcmNotificationPromptShowed', true)
|
||||
store.commit('session/fcmNotificationsBlocked', true)
|
||||
break
|
||||
case 'messaging/token-unsubscribe-failed':
|
||||
Notify.create({
|
||||
message: i18n.t('errors.firebase.try_again'),
|
||||
position: 'center'
|
||||
})
|
||||
break
|
||||
default:
|
||||
console.error(error)
|
||||
break
|
||||
}
|
||||
*/
|
||||
}
|
||||
22
src/error-handler/graphql.ts
Executable file
22
src/error-handler/graphql.ts
Executable file
@@ -0,0 +1,22 @@
|
||||
// import { i18n } from '../boot/vue-i18n'
|
||||
import { Notify } from 'quasar'
|
||||
|
||||
export default (error: any) => {
|
||||
/*
|
||||
let message = this.$i18n.t('errors.graphql.undefined')
|
||||
|
||||
if (error[0].validation) {
|
||||
let errors = Object.keys(error[0].validation)
|
||||
message = error[0].validation[errors[0]][0]
|
||||
}
|
||||
|
||||
Notify.create({
|
||||
message,
|
||||
position: 'center'
|
||||
})
|
||||
|
||||
if (message === this.$i18n.t('errors.graphql.undefined')) {
|
||||
console.log(error.response)
|
||||
}
|
||||
*/
|
||||
}
|
||||
21
src/error-handler/index.ts
Executable file
21
src/error-handler/index.ts
Executable file
@@ -0,0 +1,21 @@
|
||||
// import Backend from './backend'
|
||||
// import Firebase from './firebase'
|
||||
import Graphql from './graphql'
|
||||
|
||||
export default (context: any, error: any) => {
|
||||
/*
|
||||
if (error.constructor.nametranslate === 'FirebaseError') {
|
||||
Firebase(error)
|
||||
return
|
||||
}
|
||||
if (error.response && error.response.data && error.response.data.backend) {
|
||||
Backend(error)
|
||||
return
|
||||
} */
|
||||
|
||||
if (error[0] && error[0].locations && error[0].validation) {
|
||||
Graphql(error)
|
||||
return
|
||||
}
|
||||
console.log('Error handler', error)
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user