Components Gallery, Book, Card, CImgText .... continue...

This commit is contained in:
Paolo Arena
2019-07-23 20:44:06 +02:00
parent 116703d6cc
commit fdf2f2d2c3
49 changed files with 1692 additions and 25 deletions

View File

@@ -0,0 +1,17 @@
// 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;
}

View File

@@ -0,0 +1,128 @@
import Vue from 'vue'
import Component from 'vue-class-component'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import Quasar, { Screen } from 'quasar'
import { Prop } from 'vue-property-decorator'
@Component({
name: 'BannerCookies'
})
export default class BannerCookies extends Vue {
public $t
@Prop({ required: true }) public urlInfo: string
public elementId = 'id'
public disableDecline = true
public debug = false
public status = null
public supportsLocalStorage = true
public isOpen = false
public init() {
const visitedType = this.getCookieStatus()
if (visitedType && (visitedType === 'accept' || visitedType === 'decline' || visitedType === 'postpone')) {
this.isOpen = false
}
if (!visitedType) {
this.isOpen = true
}
if (!this.supportsLocalStorage)
this.isOpen = false
this.status = visitedType
this.$emit('status', visitedType)
}
public mounted() {
this.init()
}
public checkLocalStorageFunctionality() {
// 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')
this.supportsLocalStorage = false
}
}
public setCookieStatus(type) {
if (this.supportsLocalStorage) {
if (type === 'accept') {
localStorage.setItem(`cookie-${this.elementId}`, 'accept')
}
if (type === 'decline') {
localStorage.setItem(`cookie-${this.elementId}`, 'decline')
}
if (type === 'postpone') {
localStorage.setItem(`cookie-${this.elementId}`, 'postpone')
}
} else {
/*if (type === 'accept') {
tinyCookie.set(`cookie-${this.elementId}`, 'accept')
}
if (type === 'decline') {
tinyCookie.set(`cookie-${this.elementId}`, 'decline')
}
if (type === 'postpone') {
tinyCookie.set(`cookie-${this.elementId}`, 'postpone')
}*/
}
}
public getCookieStatus() {
if (this.supportsLocalStorage) {
return localStorage.getItem(`cookie-${this.elementId}`)
} else {
// return tinyCookie.get(`cookie-${this.elementId}`)
}
}
public accept() {
if (!this.debug) {
this.setCookieStatus('accept')
}
this.status = 'accept'
this.isOpen = false
this.$emit('clicked-accept')
}
public decline() {
if (!this.debug) {
this.setCookieStatus('decline')
}
this.status = 'decline'
this.isOpen = false
this.$emit('clicked-decline')
}
public clickInfo() {
this.isOpen = false
}
public postpone() {
if (!this.debug) {
this.setCookieStatus('postpone')
}
this.status = 'postpone'
this.isOpen = false
this.$emit('clicked-postpone')
}
public removeCookie() {
localStorage.removeItem(`cookie-${this.elementId}`)
this.status = null
this.$emit('removed-cookie')
}
}

View File

@@ -0,0 +1,25 @@
<template>
<div v-if="isOpen">
<div class="q-pa-md q-gutter-sm tothebottomfixed">
<transition appear name="slide-up" mode="out-in" :duration="2000">
<q-banner class="bg-primary text-white" transition-show="jump-down">
Usiamo i Cookie per una migliore prestazione web.
<template v-slot:action>
<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>
</template>
</q-banner>
</transition>
</div>
</div>
</template>
<script lang="ts" src="./BannerCookies.ts">
</script>
<style lang="scss" scoped>
@import './BannerCookies.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as BannerCookies} from './BannerCookies.vue'

View File

@@ -0,0 +1,66 @@
$heightBtn: 100%;
$grayshadow: #555;
.text-subtitle-carica {
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .1rem .1rem .1rem $grayshadow;
}
.text-subtitle-certificato {
font-size: 0.75rem;
line-height: 1rem;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.text-subtitle-carica {
font-size: 1rem;
}
}
.op {
text-align: center !important;
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .1rem .1rem .1rem $grayshadow;
&__cell {
font-size: 1rem;
color: red;
}
&__email {
font-size: 1rem;
color: #3b5998;
}
&__email a {
text-decoration: none;
}
&__facebook a {
font-size: 1rem;
text-decoration: none;
}
&__storia {
margin-top: 1rem;
margin-bottom: 1rem;
text-align: justify;
}
}
.myimg {
border-radius: 300px !important;
}
.q-img {
&__image {
border-radius: 300px !important;
}
}

View File

@@ -0,0 +1,52 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { IPerson } from '../../model/GlobalStore'
@Component({
name: 'CBook',
filters: {
firstchars(value) {
return tools.firstchars(value, 250)
}
}
})
export default class CBook extends Vue {
@Prop({ required: true, default: 'one' }) public tab
public clicca() {
this.tab = 'two'
}
@Prop({ required: true }) public op: IPerson
get tools() {
return tools
}
get myop() {
if (!!this.op) {
return this.op
} else {
return {
index: 0,
tab: '',
name: '',
sub1: '',
sub2: '',
sub3: '',
img: '',
cell: '',
email: '',
paginaweb: '',
paginafb: '',
intro: '',
info: ''
}
}
}
}

View File

@@ -0,0 +1,47 @@
<template>
<q-card class="my-card text-center">
<q-img :src="myop.img" class="myimg">
<div class="absolute-bottom text-spacetrans text-shadow">
<div class="text-h6 text-trans">{{myop.name}}</div>
<div class="text-subtitle-carica text-trans">{{myop.sub1}}</div>
</div>
</q-img>
<q-tabs v-model="tab" class="text-teal">
<q-tab label="Info" name="one"></q-tab>
<q-tab label="Storia" name="two"></q-tab>
</q-tabs>
<q-separator></q-separator>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="one">
<div class="text-subtitle-carica">{{myop.sub2}}</div>
<div v-if="myop.sub3" class="text-subtitle-certificato">{{myop.sub3}}</div>
<div class="op__cell">
<q-icon class="flex-icon" name="mobile_friendly"></q-icon>
{{myop.cell}}
</div>
<div class="op__storia" v-html="myop.intro"></div>
<q-btn rounded size="sm" color="secondary" @click="clicca()">Continua ...</q-btn>
</q-tab-panel>
<q-tab-panel name="two">
<div class="op__storia" v-html="myop.info"></div>
</q-tab-panel>
</q-tab-panels>
<!--<q-card-section>-->
<!--<div class="text-subtitle3">{{myop.sub2}}</div>-->
<!--{{myop.info}}-->
<!--</q-card-section>-->
</q-card>
</template>
<script lang="ts" src="./CBook.ts">
</script>
<style lang="scss" scoped>
@import './CBook.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CBook} from './CBook.vue'

View File

@@ -0,0 +1,66 @@
$heightBtn: 100%;
$grayshadow: #555;
.text-subtitle-carica {
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .1rem .1rem .1rem $grayshadow;
}
.text-subtitle-certificato {
font-size: 0.75rem;
line-height: 1rem;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.text-subtitle-carica {
font-size: 1rem;
}
}
.op {
text-align: center !important;
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .1rem .1rem .1rem $grayshadow;
&__cell {
font-size: 1rem;
color: red;
}
&__email {
font-size: 1rem;
color: #3b5998;
}
&__email a {
text-decoration: none;
}
&__facebook a {
font-size: 1rem;
text-decoration: none;
}
&__storia {
margin-top: 1rem;
margin-bottom: 1rem;
text-align: justify;
}
}
.myimg {
border-radius: 300px !important;
}
.q-img {
&__image {
border-radius: 300px !important;
}
}

View File

@@ -0,0 +1,52 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { IPerson } from '../../model/GlobalStore'
@Component({
name: 'CCard',
filters: {
firstchars(value) {
return tools.firstchars(value, 250)
}
}
})
export default class CCard extends Vue {
@Prop({ required: true, default: 'one' }) public tab
public clicca() {
this.tab = 'two'
}
@Prop({ required: true }) public op: IPerson
get tools() {
return tools
}
get myop() {
if (!!this.op) {
return this.op
} else {
return {
index: 0,
tab: '',
name: '',
sub1: '',
sub2: '',
sub3: '',
img: '',
cell: '',
email: '',
paginaweb: '',
paginafb: '',
intro: '',
info: ''
}
}
}
}

View File

@@ -0,0 +1,59 @@
<template>
<q-card class="my-card text-center">
<q-img :src="myop.img" class="myimg">
<div class="absolute-bottom text-spacetrans text-shadow">
<div class="text-h6 text-trans">{{myop.name}}</div>
<div class="text-subtitle-carica text-trans">{{myop.sub1}}</div>
</div>
</q-img>
<q-tabs v-model="tab" class="text-teal">
<q-tab label="Info" name="one"></q-tab>
<q-tab label="Storia" name="two"></q-tab>
</q-tabs>
<q-separator></q-separator>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="one">
<div class="text-subtitle-carica">{{myop.sub2}}</div>
<div v-if="myop.sub3" class="text-subtitle-certificato">{{myop.sub3}}</div>
<div class="op__cell">
<q-icon class="flex-icon" name="mobile_friendly"></q-icon>
{{myop.cell}}
</div>
<div class="op__email">
<q-icon class="flex-icon" name="contact_mail"> </q-icon>&nbsp;
<a :href="tools.getemailto(myop.email)" target="_blank">{{myop.email}}
</a>
</div>
<div class="op__facebook" v-if="myop.paginafb">
<a :href="myop.paginafb" target="_blank">
<i aria-hidden="true" class="q-icon fab fa-facebook-f icon_contact links"></i> Pagina Facebook
</a>
</div>
<div class="op__storia" v-html="myop.intro"></div>
<q-btn rounded size="sm" color="secondary" @click="clicca()">Continua ...</q-btn>
</q-tab-panel>
<q-tab-panel name="two">
<div class="op__storia" v-html="myop.info"></div>
</q-tab-panel>
</q-tab-panels>
<!--<q-card-section>-->
<!--<div class="text-subtitle3">{{myop.sub2}}</div>-->
<!--{{myop.info}}-->
<!--</q-card-section>-->
</q-card>
</template>
<script lang="ts" src="./CCard.ts">
</script>
<style lang="scss" scoped>
@import './CCard.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CCard} from './CCard.vue'

View File

@@ -0,0 +1,54 @@
.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: 718px) {
// 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;
}

View File

@@ -0,0 +1,30 @@
import Vue from 'vue'
import { Component, Prop } from 'vue-property-decorator'
import { GlobalStore, UserStore } from '@store'
import VueScrollReveal from 'vue-scroll-reveal'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
// Vue.use(VueScrollReveal, {
// class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
// duration: 1200,
// scale: 0.95,
// distance: '10px',
// rotate: {
// x: 0,
// y: 0,
// z: 0
// }
// // mobile: true
// })
@Component({
name: 'CImgText'
})
export default class CImgText extends Vue {
@Prop({ required: false, default: '' }) public src: string
@Prop({ required: false, default: '' }) public class1: string
@Prop({ required: false, default: '' }) public style1: string
}

View File

@@ -0,0 +1,20 @@
<template>
<div>
<section class="padding_testo bg-white text-grey-10 text-justify" > <!-- v-scroll-reveal.reset -->
<div class="row items-start q-col-gutter-xs imgtext">
<div class="imgtext__img">
<img v-if="src" :src="src" :class="class1" :style="style1">
<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>

View File

@@ -0,0 +1 @@
export {default as CImgText} from './CImgText.vue'

View File

View File

@@ -0,0 +1,36 @@
import Vue from 'vue'
import { Component, Prop } from 'vue-property-decorator'
import { GlobalStore, UserStore } from '@store'
import { Logo } from '../../components/logo'
import { Footer } from '../../components/Footer'
import VueScrollReveal from 'vue-scroll-reveal'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
Vue.use(VueScrollReveal, {
class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
duration: 1200,
scale: 0.95,
distance: '10px',
rotate: {
x: 0,
y: 0,
z: 0
}
// mobile: true
})
@Component({
name: 'CPage',
components: { Logo, Footer }
})
export default class CPage extends Vue {
@Prop({ required: true }) public imghead: string = ''
@Prop({ required: true }) public headtitle: string = ''
@Prop({ required: true }) public img1: string = ''
@Prop({ required: true }) public text1: string = ''
}

View File

@@ -0,0 +1,28 @@
<template>
<q-page class="text-white">
<div class="landing">
<CTitle :src="imghead" :title="headtitle">
</CTitle>
<section class="padding_testo bg-white text-grey-10 text-center" v-scroll-reveal.reset>
<div class="landing__features row items-start q-col-gutter-xs intro">
<div class="intro__associazione">
<!--<img src="../../statics/images/scuolaopbenessere/16427623_404497389905092_1266178961781563443_n.jpg">-->
<img :src="img1">
{{text1}}
</div>
</div>
</section>
<Footer></Footer>
</div>
</q-page>
</template>
<script lang="ts" src="./CPage.ts">
</script>
<style lang="scss" scoped>
@import './CPage.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CPage} from './CPage.vue'

View File

@@ -0,0 +1,18 @@
.cltitlebg{
}
.titletext {
color: white;
font-size: 3rem;
font-weight: 500;
line-height: 3rem;
text-shadow: .25rem .25rem .5rem black;
letter-spacing: .00937em;
}
.q-img__content > div{
background: rgba(0,0,0,0.17) !important;
}

View File

@@ -0,0 +1,20 @@
import Vue from 'vue'
import { Component, Prop } from 'vue-property-decorator'
import { GlobalStore, UserStore } from '@store'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
@Component({
name: 'CTitle'
})
export default class CTitle extends Vue {
@Prop({ required: false, default: '' }) public imgbackground: string
@Prop({ required: false, default: '' }) public imghead: string
@Prop({ required: true }) public headtitle: string
get tools() {
return tools
}
}

View File

@@ -0,0 +1,27 @@
<template>
<div>
<q-img v-if="imgbackground" :src="imgbackground"
:style="tools.styles_imgtitle()">
<div class="absolute-bottom text-body1 text-center">
<h2 class="titletext">{{headtitle}}</h2>
</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>

View File

@@ -0,0 +1 @@
export {default as CTitle} from './CTitle.vue'

View File

@@ -0,0 +1,180 @@
$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(../../statics/images/landing_first_section.png) !important
}
.landing__footer-icons {
font-size: 1.75rem
}
.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(../../statics/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;
}
.carousel_img_3 {
//background-image: url(../../statics/images/cibo_sano.jpg);
background-size: 620px 620px !important;
background-position: 50% top !important;
background-repeat: no-repeat !important;
}
}
.custom-caption {
text-align: center;
padding: .75rem;
color: $textcol;
background-color: rgba(0, 0, 0, .3);
}
.mycontacts {
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 {
color: #999;
letter-spacing: normal !important;
}
.footer_link {
font-size: 1rem;
color:gray;
}
.footer_link:hover {
color:white;
}

View File

@@ -0,0 +1,37 @@
import Vue from 'vue'
import { GlobalStore, UserStore } from '@modules'
import { Logo } from '../logo'
import { Component, Prop } from 'vue-property-decorator'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { db_data } from '@src/db/db_data'
import { static_data } from '@src/db/static_data'
import Quasar from 'quasar'
import { FormNewsletter } from '../FormNewsletter'
@Component({
name: 'Footer',
components: { Logo, FormNewsletter }
})
export default class Footer extends Vue {
public $t
public $v
public $q
get TelegramSupport() {
return db_data.TELEGRAM_SUPPORT
}
get FBPage() {
return db_data.URL_FACEBOOK
}
get static_data(){
return static_data
}
}

View File

@@ -0,0 +1,87 @@
<template>
<div>
<section class="landing__footer">
<div class="row justify-between items-start q-col-gutter-xs">
<div class="col-12 col-sm-4 ">
<p style="text-align: center">
<logo></logo>
</p>
<!--<span v-html="$t('homepage.footer.description')">-->
<!--</span>-->
<FormNewsletter v-if="static_data.SHOW_NEWSLETTER"
>
</FormNewsletter>
</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>
<p class="mycontacts_text" v-html="$t('homepage.contacts')"></p>
</div>
<div class="landing__footer-icons row flex-center">
<a :href="FBPage" target="_blank">
<i aria-hidden="true" class="q-icon fab fa-facebook-f icon_contact links"> </i></a>
<a :href="TelegramSupport" 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>
<div class="col-12 col-sm-4 q-pa-md" v-for="">
<a href="/"><span class="footer_link">Home</span></a><br />
</div>
<!--
<div class="col-12 col-sm-4 q-pa-md">
<a href="/"><span class="footer_link">Home</span></a><br />
<a href="/chisiamo"><span class="footer_link">Chi Siamo</span></a><br />
<a href="/calendarioeventi"><span class="footer_link">Calendario Eventi</span></a><br />
<a href="/reiki/significato"><span class="footer_link">Reiki</span></a><br />
<a href="/reiki/seminari"><span class="footer_link"> - Seminari Reiki</span></a><br />
<a href="/reiki/trattamentiindividuali"><span class="footer_link"> - Trattamenti Individuali</span></a><br />
<a href="/reiki/seratereikigruppo"><span class="footer_link"> - Serate di Gruppo</span></a><br />
<a href="/shiatsu/significato"><span class="footer_link">Shiatsu</span></a><br />
<a href="/shiatsu/trattamentiindividuali"><span class="footer_link"> - Trattamenti Individuali</span></a><br />
<a href="/shiatsu/energyyoga"><span class="footer_link"> - Energy Yoga</span></a><br />
<a href="/fioridibach"><span class="footer_link">Fiori di Bach</span></a><br />
<a href="/scuolaoperatoreolistico"><span class="footer_link">Scuola Operatore Olistico</span></a><br />
<a href="/scuoladinaturopatia"><span class="footer_link">Scuola di Naturopatia</span></a><br />
<br /><a href="/policy"><span class="footer_link">Privacy Policy</span></a><br />
</div>
-->
</div>
</section>
<q-page-scroller position="bottom-right" :scroll-offset="850" :offset="[18, 18]" style="opacity: 0.3">
<q-btn fab icon="keyboard_arrow_up" color="accent"/>
</q-page-scroller>
</div>
</template>
<script lang="ts" src="./Footer.ts">
</script>
<style lang="scss" scoped>
@import './Footer.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as Footer} from './Footer.vue'

View 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;
}

View File

@@ -0,0 +1,47 @@
import Vue from 'vue'
import Component from 'vue-class-component'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import Quasar, { Screen } from 'quasar'
import { Prop } from 'vue-property-decorator'
@Component({
name: 'FormNewsletter'
})
export default class FormNewsletter extends Vue {
public $t
public $q
public name: string = null
public email: string = null
public accept: boolean = false
public onSubmit() {
if (this.accept !== true) {
this.$q.notify({
color: 'red-5',
textColor: 'white',
icon: 'fas fa-exclamation-triangle',
message: this.$t('newsletter.license')
})
}
else {
this.$q.notify({
color: 'green-4',
textColor: 'white',
icon: 'fas fa-check-circle',
message: this.$t('newsletter.submitted')
})
}
}
public onReset() {
this.name = null
this.email = null
this.accept = false
}
}

View File

@@ -0,0 +1,50 @@
<template>
<div>
<div class="q-pa-md q-gutter-sm text-white">
<p class="news_title">Desideri ricevere la nostra Newsletter?</p>
<q-form
@submit="onSubmit"
@reset="onReset"
class="q-gutter-md"
>
<q-input
filled
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
dark standout
v-model="email"
:label="$t('newsletter.email') + `*`"
lazy-rules
:rules="[ val => val && val.length > 6 || $t('newsletter.typesomething')]">
</q-input>
<a href="/policy"><span class="news_link">Privacy Policy</span></a>
<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>

View File

@@ -0,0 +1 @@
export {default as FormNewsletter} from './FormNewsletter.vue'

View File

@@ -38,10 +38,6 @@ export default class Header extends Vue {
public photo = '' public photo = ''
public visuimg: boolean = true public visuimg: boolean = true
public selectOpLang() {
return static_data.lang_available
}
get getappname(){ get getappname(){
if (Screen.width < 400) { if (Screen.width < 400) {
@@ -205,10 +201,10 @@ export default class Header extends Vue {
} }
public setshortlang(lang) { public setshortlang(lang) {
for (const indrec in this.selectOpLang) { for (const indrec in static_data.lang_available) {
if (this.selectOpLang[indrec].value === lang) { if (static_data.lang_available[indrec].value === lang) {
// console.log('this.selectOpLang[indrec].short', this.selectOpLang[indrec].short, this.selectOpLang[indrec].value) // console.log('static_data.lang_available[indrec].short', static_data.lang_available[indrec].short, static_data.lang_available[indrec].value)
this.langshort = this.selectOpLang[indrec].short this.langshort = static_data.lang_available[indrec].short
return return
} }
} }
@@ -220,7 +216,7 @@ export default class Header extends Vue {
} }
public setLangAtt(mylang) { public setLangAtt(mylang) {
console.log('MYLL=', mylang) console.log('LANG =', mylang)
// console.log('PRIMA this.$q.lang.isoName', this.$q.lang.isoName) // console.log('PRIMA this.$q.lang.isoName', this.$q.lang.isoName)
// dynamic import, so loading on demand only // dynamic import, so loading on demand only

View File

@@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<q-header reveal elevated class="bg-primary text-white"> <q-header reveal elevated class="bg-primary">
<q-toolbar <q-toolbar
color="primary" color="primary"
:glossy="$q.theme === 'mat'" :glossy="$q.theme === 'mat'"
@@ -72,7 +72,7 @@
<q-btn-dropdown <q-btn-dropdown
stretch stretch
v-if="selectOpLang.length > 1" v-if="static_data.lang_available.length > 1"
flat flat
:label="langshort" :label="langshort"
auto-close auto-close
@@ -80,7 +80,7 @@
<q-list bordered> <q-list bordered>
<q-item clickable v-ripple <q-item clickable v-ripple
v-for="langrec in selectOpLang" :key="langrec.value" v-for="langrec in static_data.lang_available" :key="langrec.value"
@click="lang = langrec.value"> @click="lang = langrec.value">
<q-item-section avatar> <q-item-section avatar>
<img :src="langrec.image" class="flagimg"> <img :src="langrec.image" class="flagimg">
@@ -102,7 +102,8 @@
<label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> ! <label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> !
</div>--> </div>-->
<q-btn dense flat round icon="menu" @click="right = !right"/> <q-btn v-if="static_data.SHOW_USER_MENU" dense flat round icon="menu" @click="right = !right">
</q-btn>
</q-toolbar> </q-toolbar>
@@ -120,11 +121,11 @@
</q-drawer> </q-drawer>
<q-drawer v-model="right" side="right" overlay bordered> <q-drawer v-if="static_data.SHOW_USER_MENU" v-model="right" side="right" overlay bordered>
<div id="profile"> <div id="profile">
<q-img class="absolute-top" src="https://cdn.quasar-framework.org/img/material.png" <q-img class="absolute-top" src="../../statics/images/landing_first_section.png"
style="height: 150px"> style="height: 150px">
<div class="absolute-bottom bg-transparent"> <div class="absolute-bottom bg-transparent text-black">
<q-avatar class="q-mb-sm"> <q-avatar class="q-mb-sm">
<img src="../../statics/images/avatar-1.svg"> <img src="../../statics/images/avatar-1.svg">

View File

@@ -0,0 +1,11 @@
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p {
color: black;
margin: 0 0 1rem;
//text-shadow: .125rem .125rem .25rem $grayshadow;
}

View File

@@ -0,0 +1,23 @@
import Vue from 'vue'
import { Component, Prop } from 'vue-property-decorator'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { ICategory } from '../../model'
import { Footer } from '../../components/Footer/index'
@Component({
name: 'PagePolicy',
components: { Footer }
})
export default class PagePolicy extends Vue {
@Prop({required: true}) public owneremail: string
@Prop({required: true}) public SiteName: string
@Prop({required: true}) public ownerDataName: string
@Prop({required: true}) public managerData: string
@Prop({required: true}) public includeData: string
@Prop({required: true}) public url: string
@Prop({required: true}) public lastdataupdate: string
}

View File

@@ -0,0 +1,130 @@
<template>
<q-page class="q-pa-md">
<p class="text-subtitle1">Privacy Policy di {{url}}</p>
<p class="text-subtitle1">Informativa sul trattamento dei dati personali ai sensi dellart. 13 del Regolamento
(UE) n. 2016/679</p>
<p>Ai sensi dellart. 13 del Regolamento (UE) n. 2016/679, anche denominato General Data Protection Regulation
(di
seguito il GDPR), {{SiteName}} La informa che i Suoi dati personali (di seguito i Dati),
saranno trattati nel rispetto di quanto previsto dal GDPR e di ogni normativa applicabile in riferimento al
trattamento dei dati personali in conformità allinformativa che segue.</p>
<p><span class="text-subtitle2">1. Titolare del trattamento</span><br/>
{{ownerDataName}}</p>
<p><span class="boldhigh">Responsabile trattamento e protezione dati:</span><br/>
{{managerData}}
</p>
<p>Il Responsabile della protezione dei Dati è contattabile via e-mail:
{{owneremail}} per informazioni sul trattamento dei Dati comunicati o comunque raccolti nel corso della
navigazione sul presente sito, nel rispetto della vigente disciplina in materia di privacy.</p>
<p class="text-subtitle2">2. Categorie di Dati</p>
<p>I Dati trattati dal Titolare includono: {{includeData}}.</p>
<p class="text-subtitle2">3. Finalità e base giuridica del trattamento. Legittimo interesse.</p>
<p>I Dati saranno trattati per ladempimento di finalità informative, commerciali e amministrative ad obblighi
di
legge, ai sensi dellart. 6, comma 1, lettera b) e c) del GDPR, nonché il perseguimento del legittimo
interesse
del Titolare, allart. 6, comma 1, lettera f del GDPR, in riferimento a:
rispetto di procedure amministrative interne e adempimento di obblighi di legge o regolamenti vigenti in
Italia;
linvio di comunicazioni di natura informativa, commerciale e promozionale.</p>
<p>In ogni caso, il trattamento dei Suoi Dati effettuato sulla base del proprio legittimo interesse del Titolare
avviene, oltre che nel rispetto di quanto previsto allart. 6, comma 1, lettera f del GDPR, anche in
conformità
a quanto disposto al considerando n. 47 e allOpinion n. 6/2014 Article 29 Data Protection Working Party,
par.
III.3.1.</p>
<p class="text-subtitle2">4. Modalità del trattamento.</p>
<p>I Suoi Dati sono raccolti e registrati in modo lecito e secondo correttezza per le finalità sopra indicate e
sono trattati anche con lausilio di strumenti elettronici e automatizzati, anche mediante linserimento e
lorganizzazione in banche dati, in conformità a quanto disposto dal GDPR in materia di misure di sicurezza,
e,
comunque, in modo tale da garantire la sicurezza e la riservatezza dei Dati stessi.</p>
<p class="text-subtitle2">5. Destinatari o categorie di destinatari.</p>
<p>I Dati potranno essere resi accessibili, portati a conoscenza di o comunicati ai seguenti soggetti, i quali
saranno nominati dal Titolare, a seconda dei casi, quali responsabili la cui lista è disponibile presso la
sede del Titolare o incaricati:
dipendenti e/o collaboratori a qualsivoglia titolo del Titolare;
soggetti pubblici o privati, persone fisiche o giuridiche, di cui il Titolare si avvalga per lo svolgimento
delle attività strumentali al raggiungimento della finalità di cui sopra o a cui il Titolare sia tenuto a
comunicare i Dati in forza di obblighi legali o contrattuali.</p>
<p>In ogni caso, i Dati non saranno diffusi.</p>
<p class="text-subtitle2">6. Luogo</p>
<p>I Dati sono trattati presso le sedi operative del Titolare ed in ogni altro luogo in cui le parti coinvolte
nel
trattamento siano localizzate. Per ulteriori informazioni, contattare il Titolare agli estremi riportati in
apertura.</p>
<p class="text-subtitle2">7. Periodo di conservazione.</p>
<p>I Dati saranno conservati per un periodo di tempo non superiore a 10 (dieci) anni per finalità amministrative
e,
comunque, per il tempo strettamente necessario al perseguimento dellinteresse legittimo del Titolare.</p>
<p class="text-subtitle2">8. Diritti di accesso, cancellazione, limitazione e portabilità.</p>
<p>Il Titolare La informa che Le sono riconosciuti i diritti di cui agli artt. da 15 a 20 del GDPR. A titolo
esemplificativo, inviando specifica richiesta allindirizzo email {{owneremail}}, Lei potrà:
ottenere la conferma che sia o meno in corso un trattamento di dati personali che La riguardano;
qualora un trattamento sia in corso, ottenere laccesso ai dati e alle informazioni relative al trattamento,
nonché richiedere una copia dei dati stessi;
ottenere la rettifica dei dati inesatti e lintegrazione dei dati personali incompleti;
ottenere, qualora sussista una delle condizioni previste dallart. 17 del GDPR, la cancellazione dei Dati
che La
riguardano;
ottenere, nei casi previsti dallart. 18 del GDPR, la limitazione del trattamento dei Dati che La
riguardano;
ricevere i Dati che La riguardano in un formato strutturato, di uso comune e leggibile da dispositivo
automatico
e richiedere la loro trasmissione ad un altro titolare, se tecnicamente fattibile.</p>
<p class="text-subtitle2">9. Diritto di opposizione.</p>
<p>Ai sensi dellart. 21 del GDPR, Lei godrà altresì del diritto di opporsi in qualsiasi momento al trattamento
dei
propri Dati effettuato per il perseguimento del legittimo interesse del Titolare scrivendo allindirizzo
email
{{owneremail}}. In caso di opposizione, i Dati non saranno più oggetto di trattamento, sempre che non
sussistano motivi legittimi per procedere al trattamento che prevalgono sugli interessi, sui diritti e sulle
libertà degli interessati, oppure per laccertamento, lesercizio o la difesa di un diritto in sede
giudiziaria.</p>
<p class="text-subtitle2">Responsabile della protezione dei dati</p>
<p>Il titolare ha provveduto a nominare il responsabile della protezione dei dati che è contattabile alla
seguente
casella di posta elettronica {{owneremail}}.</p>
<p class="text-subtitle2">10. Diritto di proporre reclamo al Garante.</p>
<p>Il Titolare La informa altresì che potrà proporre reclamo al Garante per la Protezione dei Dati Personali nel
caso in cui ritenga che siano stati violati i diritti di cui è titolare ai sensi del GDPR o di qualsiasi
altra
normativa applicabile, secondo le modalità indicate sul sito internet del Garante per la Protezione dei Dati
Personali accessibile allindirizzo: <a href="http://www.garanteprivacy.it" target="_blank">www.garanteprivacy.it</a>.</p>
<p>Ultimo aggiornamento: {{lastdataupdate}}</p>
<Footer></Footer>
</q-page>
</template>
<script lang="ts" src="./PagePolicy.ts">
</script>
<style lang="scss" scoped>
@import './PagePolicy.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as PagePolicy} from './PagePolicy.vue'

View File

@@ -3,6 +3,7 @@ export * from './todos'
export * from './logo' export * from './logo'
export * from './CProgress' export * from './CProgress'
export * from './CCard' export * from './CCard'
export * from './CBook'
export * from './CPage' export * from './CPage'
export * from './CTitle' export * from './CTitle'
export * from './CDate' export * from './CDate'

44
src/model/Calendar.ts Normal file
View File

@@ -0,0 +1,44 @@
export interface IEvents {
time?: string
duration?: number
title?: string
details?: string
date?: string
side?: string
bgcolor?: string
days?: number
icon?: string
img?: string
where?: string
teacher?: string
teacher2?: string
avatar?: string
avatar2?: string
infoextra?: string
linkpdf?: string
}
export interface ICalendarState {
titlebarHeight: number
locale: string,
maxDays: number,
fiveDayWorkWeek: boolean,
shortMonthLabel: boolean,
showDayOfYearLabel: boolean,
shortWeekdayLabel: boolean,
shortIntervalLabel: boolean,
hour24Format: boolean,
hideHeader: boolean,
noScroll: boolean,
showMonthLabel: boolean,
showWorkWeeks: boolean,
intervalRange: {min: number, max: number},
intervalRangeStep: number,
intervalHeight: number,
resourceHeight: number,
resourceWidth: number,
dayHeight: number,
enableThemes: boolean,
theme: {}
}

View File

@@ -112,3 +112,39 @@ export interface ILang {
image: string image: string
short: string short: string
} }
export interface IAllLang {
es?: string
enUs?: string
fr?: string
it?: string
}
export interface ITimeLineEntry {
date: string
title: string
description: IAllLang
description2?: IAllLang
description3?: IAllLang
icon: string
image: string
image2?: string
image3?: string
image4?: string
side: string
link_url?: string
link_text?: IAllLang
}
export interface ITimeLineMain {
titlemain: IAllLang
body: ITimeLineEntry[]
}
export interface IGallery {
title: string
subtitle?: IAllLang
img: string
width?: number
height?: number
}

View File

@@ -432,7 +432,7 @@ namespace Actions {
} }
async function loadAfterLogin(context) { async function loadAfterLogin(context) {
console.log('loadAfterLogin') // console.log('loadAfterLogin')
actions.clearDataAfterLoginOnlyIfActiveConnection() actions.clearDataAfterLoginOnlyIfActiveConnection()
state.arrConfig = await globalroutines(null, 'readall', 'config', null) state.arrConfig = await globalroutines(null, 'readall', 'config', null)

View File

@@ -14,6 +14,7 @@ import { costanti } from '@src/store/Modules/costanti'
import { RouteNames } from '@src/router/route-names' import { RouteNames } from '@src/router/route-names'
import * as Types from '@src/store/Api/ApiTypes' import * as Types from '@src/store/Api/ApiTypes'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@src/store/Modules/serv_constants'
import { static_data } from '@src/db/static_data'
const nametable = 'projects' const nametable = 'projects'
@@ -273,6 +274,9 @@ namespace Actions {
async function dbLoad(context, { checkPending, onlyiffirsttime }) { async function dbLoad(context, { checkPending, onlyiffirsttime }) {
if (!static_data.ENABLE_PROJECTS_LOADING)
return null
if (onlyiffirsttime) { if (onlyiffirsttime) {
if (stateglob.projects.length > 0) { if (stateglob.projects.length > 0) {
// if already set, then exit. // if already set, then exit.

View File

@@ -0,0 +1,89 @@
import Api from '@api'
import { ICalendarState } from 'model'
import { ILinkReg, IResult, IIdToken, IToken } from 'model/other'
import { storeBuilder } from '../Store'
import { serv_constants } from '../../serv_constants'
import { tools } from '../../tools'
import translate from '../../../../globalroutines/util'
import * as Types from '../../../Api/ApiTypes'
// State
const state: ICalendarState = {
titlebarHeight: 0,
locale: 'it-IT',
maxDays: 1,
fiveDayWorkWeek: false,
shortMonthLabel: false,
showDayOfYearLabel: false,
shortWeekdayLabel: false,
shortIntervalLabel: false,
hour24Format: true,
hideHeader: false,
noScroll: false,
showMonthLabel: true,
showWorkWeeks: false,
intervalRange: {min: 9, max: 23},
intervalRangeStep: 1,
intervalHeight: 35,
resourceHeight: 60,
resourceWidth: 100,
dayHeight: 100,
enableThemes: false,
theme: {}
}
const b = storeBuilder.module<ICalendarState>('CalendarModule', state)
const stateGetter = b.state()
namespace Getters {
// const lang = b.read((state) => {
// if (state.lang !== '') {
// return state.lang
// } else {
// return process.env.LANG_DEFAULT
// }
// }, 'lang')
//
// export const getters = {
// get lang() {
// return lang()
// },
// }
}
namespace Mutations {
// function authUser(state: ICalendarState, data: ICalendarState) {
// state.userId = data.userId
// }
//
// export const mutations = {
// authUser: b.commit(authUser),
// }
}
namespace Actions {
// async function resetpwd(context, paramquery: ICalendarState) {
// }
//
// export const actions = {
// autologin_FromLocalStorage: b.dispatch(autologin_FromLocalStorage)
// }
}
// Module
const CalendarModule = {
get state() {
return stateGetter()
}
// actions: Actions.actions,
// getters: Getters.getters,
// mutations: Mutations.mutations
}
export default CalendarModule

View File

@@ -15,6 +15,7 @@ import objectId from '@src/js/objectId'
import { costanti } from '@src/store/Modules/costanti' import { costanti } from '@src/store/Modules/costanti'
import { IAction } from '@src/model' import { IAction } from '@src/model'
import * as Types from '@src/store/Api/ApiTypes' import * as Types from '@src/store/Api/ApiTypes'
import { static_data } from '@src/db/static_data'
const nametable = 'todos' const nametable = 'todos'
@@ -217,7 +218,7 @@ namespace Mutations {
ApiTables.removeitemfromarray(stateparam.todos[indcat], ind) ApiTables.removeitemfromarray(stateparam.todos[indcat], ind)
} }
async function movemyitem(stateparam: ITodosState, { myitemorig, myitemdest } ) { async function movemyitem(stateparam: ITodosState, { myitemorig, myitemdest }) {
const indcat = stateparam.categories.indexOf(myitemorig.category) const indcat = stateparam.categories.indexOf(myitemorig.category)
const indorig = tools.getIndexById(stateparam.todos[indcat], myitemorig._id) const indorig = tools.getIndexById(stateparam.todos[indcat], myitemorig._id)
@@ -251,13 +252,19 @@ namespace Mutations {
namespace Actions { namespace Actions {
async function dbLoad(context, { checkPending }) { async function dbLoad(context, { checkPending }) {
if (!static_data.ENABLE_PROJECTS_LOADING)
return null
console.log('dbLoad', nametable, checkPending, 'userid=', UserStore.state.userId) console.log('dbLoad', nametable, checkPending, 'userid=', UserStore.state.userId)
// if (UserStore.state.userId === '') { // if (UserStore.state.userId === '') {
// return new Types.AxiosError(0, null, 0, '') // return new Types.AxiosError(0, null, 0, '')
// } // }
const ris = await Api.SendReq('/todos/' + UserStore.state.userId, 'GET', null) let ris = null
ris = await Api.SendReq('/todos/' + UserStore.state.userId, 'GET', null)
.then((res) => { .then((res) => {
if (res.data.todos) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories) if (res.data.todos) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
state.todos = res.data.todos state.todos = res.data.todos

View File

@@ -512,9 +512,10 @@ namespace Actions {
} }
async function setGlobal(isLogged: boolean) { async function setGlobal(isLogged: boolean) {
state.isLogged = true // state.isLogged = true
console.log('state.isLogged') state.isLogged = isLogged
if (isLogged) { if (isLogged) {
console.log('state.isLogged')
GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(tools.localStorage.leftDrawerOpen) === 'true') GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(tools.localStorage.leftDrawerOpen) === 'true')
GlobalStore.mutations.setCategorySel(localStorage.getItem(tools.localStorage.categorySel)) GlobalStore.mutations.setCategorySel(localStorage.getItem(tools.localStorage.categorySel))
@@ -531,7 +532,7 @@ namespace Actions {
async function autologin_FromLocalStorage(context) { async function autologin_FromLocalStorage(context) {
try { try {
console.log('*** autologin_FromLocalStorage ***') // console.log('*** autologin_FromLocalStorage ***')
// INIT // INIT
let isLogged = false let isLogged = false
@@ -566,7 +567,7 @@ namespace Actions {
await setGlobal(isLogged) await setGlobal(isLogged)
console.log('autologin userId STATE ', state.userId) // console.log('autologin userId STATE ', state.userId)
return true return true
} catch (e) { } catch (e) {

View File

@@ -1310,7 +1310,7 @@ export const tools = {
, ,
checkLangPassed(mylang) { checkLangPassed(mylang) {
console.log('checkLangPassed') // console.log('checkLangPassed')
const mybrowserLang = Quasar.lang.isoName const mybrowserLang = Quasar.lang.isoName
@@ -1345,7 +1345,7 @@ export const tools = {
UserStore.mutations.setlang(mylang) UserStore.mutations.setlang(mylang)
} }
console.log('mylang calc : ', mylang) // console.log('mylang calc : ', mylang)
return mylang return mylang
}, },
@@ -1525,6 +1525,14 @@ export const tools = {
return '' return ''
} }
, ,
getstrMMMDate(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
return date.formatDate(mytimestamp, 'DD MMM YYYY')
else
return ''
}
,
getstrYYMMDDDate(mytimestamp) { getstrYYMMDDDate(mytimestamp) {
return date.formatDate(mytimestamp, 'YYYY-MM-DD') return date.formatDate(mytimestamp, 'YYYY-MM-DD')
} }

View File

@@ -0,0 +1,41 @@
import { UserStore } from '@store'
export const toolsext = {
getLocale(vero?: boolean) {
if (UserStore) {
if (UserStore.state) {
return UserStore.state.lang
}
}
return process.env.LANG_DEFAULT
}
}
export const func_tools = {
getLocale(vero?: boolean) {
if (UserStore) {
if (UserStore.state) {
return UserStore.state.lang
}
}
return ''
},
getDateStr(mydate) {
if (costanti_tools.DateFormatter) {
const date = new Date(mydate)
return costanti_tools.DateFormatter.format(date)
}
return mydate
}
}
export const costanti_tools = {
DateFormatter: new Intl.DateTimeFormat(func_tools.getLocale() || void 0, {
weekday: 'long',
day: 'numeric',
month: 'long',
year: 'numeric'
// timeZone: 'UTC'
})
}

View File

@@ -0,0 +1,90 @@
/* eslint-disable */
export default {
Digitalizer: `<g>
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M259.476,280.364V247.5c0-12.958-10.542-23.5-23.5-23.5s-23.5,10.542-23.5,23.5v29.672 c0,35.757-13.173,70.087-37.094,96.665l-32.981,36.646c-2.771,3.079-2.521,7.821,0.558,10.593c3.078,2.771,7.82,2.521,10.592-0.558 l32.981-36.646c26.403-29.338,40.944-67.231,40.944-106.7V247.5c0-4.687,3.813-8.5,8.5-8.5s8.5,3.813,8.5,8.5v32.864 c0,44.003-16.301,86.167-45.901,118.727l-32.149,35.364c-2.786,3.064-2.56,7.809,0.505,10.595c1.437,1.307,3.242,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l32.148-35.364C241.789,373.854,259.476,328.106,259.476,280.364z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M291.476,247.5c0-30.603-24.897-55.5-55.5-55.5s-55.5,24.897-55.5,55.5v29.672c0,27.839-10.256,54.566-28.879,75.258 l-23.447,26.053c-2.771,3.079-2.521,7.821,0.558,10.593c3.079,2.771,7.82,2.519,10.592-0.558l23.447-26.053 c21.106-23.451,32.73-53.742,32.73-85.293V247.5c0-22.332,18.168-40.5,40.5-40.5c22.332,0,40.5,18.168,40.5,40.5v32.864 c0,51.979-19.256,101.789-54.223,140.252l-27.125,29.839c-2.787,3.064-2.561,7.809,0.504,10.595c1.437,1.307,3.242,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l27.126-29.839c37.481-41.23,58.123-94.622,58.123-150.342V247.5z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M323.476,247.5c0-48.248-39.252-87.5-87.5-87.5s-87.5,39.252-87.5,87.5v29.672c0,19.92-7.339,39.045-20.665,53.851 l-21.112,23.458c-2.771,3.079-2.521,7.821,0.558,10.593c3.078,2.771,7.821,2.519,10.592-0.558l21.112-23.458 c15.809-17.565,24.515-40.254,24.515-63.886V247.5c0-39.977,32.523-72.5,72.5-72.5s72.5,32.523,72.5,72.5v32.864 c0,59.958-22.212,117.412-62.545,161.777l-7.507,8.258c-2.786,3.065-2.56,7.809,0.505,10.595c1.437,1.306,3.243,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l7.506-8.258c42.848-47.133,66.446-108.169,66.446-171.867V247.5z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M116.476,247.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-25.255,9.169-49.651,25.819-68.695 c16.495-18.867,39.134-31.205,63.746-34.741c4.1-0.589,6.946-4.391,6.357-8.49c-0.589-4.1-4.394-6.942-8.49-6.357 c-28.16,4.046-54.052,18.15-72.906,39.716C126.962,190.71,116.476,218.613,116.476,247.5z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M131.476,277.172c0-4.143-3.358-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,12.002-4.421,23.523-12.449,32.443l-18.779,20.867 c-2.771,3.078-2.521,7.82,0.558,10.592c1.434,1.29,3.227,1.925,5.015,1.925c2.052,0,4.097-0.838,5.577-2.483l18.779-20.866 C125.687,307.971,131.476,292.886,131.476,277.172z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M340.755,344.123c-4.009-1.044-8.105,1.351-9.155,5.357c-2.769,10.579-6.213,21.096-10.24,31.258 c-1.526,3.851,0.359,8.21,4.21,9.735c0.907,0.359,1.841,0.529,2.761,0.529c2.985,0,5.808-1.795,6.975-4.739 c4.249-10.725,7.884-21.822,10.806-32.986C347.16,349.271,344.761,345.172,340.755,344.123z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M315.791,158.632c-3.081-2.771-7.823-2.517-10.592,0.563s-2.517,7.822,0.563,10.591 c22.061,19.832,34.713,48.157,34.713,77.714v32.864c0,12.473-0.86,25.042-2.557,37.359c-0.565,4.104,2.303,7.888,6.406,8.453 c0.347,0.048,0.692,0.071,1.033,0.071c3.688,0,6.903-2.722,7.42-6.478c1.79-12.993,2.698-26.251,2.698-39.406V247.5 C355.476,213.695,341.011,181.304,315.791,158.632z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M280.729,153.076c1.041,0.496,2.138,0.73,3.219,0.73c2.803,0,5.492-1.579,6.777-4.278c1.781-3.739,0.192-8.215-3.547-9.995 c-10.806-5.145-22.291-8.616-34.136-10.317c-4.106-0.585-7.901,2.258-8.49,6.357s2.257,7.901,6.357,8.49 C261.257,145.55,271.289,148.582,280.729,153.076z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M235.976,96c-2.806,0-5.644,0.078-8.437,0.232c-4.136,0.228-7.304,3.766-7.076,7.901c0.229,4.136,3.763,7.321,7.902,7.075 c2.519-0.139,5.079-0.209,7.61-0.209c75.266,0,136.5,61.233,136.5,136.5v32.864c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5V247.5 C387.476,163.963,319.513,96,235.976,96z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M153.972,136.693c1.477,0,2.97-0.436,4.275-1.343c12.478-8.677,26.182-15.155,40.733-19.258 c3.987-1.124,6.308-5.268,5.184-9.254s-5.269-6.304-9.254-5.184c-16.16,4.556-31.376,11.749-45.226,21.379 c-3.401,2.365-4.241,7.039-1.876,10.439C149.265,135.57,151.599,136.693,153.972,136.693z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M99.476,277.172V247.5c0-34.89,13.213-68.118,37.205-93.565c2.841-3.014,2.702-7.76-0.312-10.602 s-7.761-2.701-10.602,0.312C99.14,171.886,84.476,208.77,84.476,247.5v29.672c0,4.083-1.504,8.002-4.234,11.035l-9.248,10.275 c-2.771,3.079-2.521,7.821,0.558,10.592c1.433,1.291,3.227,1.926,5.015,1.926c2.052,0,4.096-0.837,5.577-2.482l9.248-10.275 C96.605,292.449,99.476,284.966,99.476,277.172z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M409.951,189.104c-8.226-24.446-21.299-46.531-38.856-65.642c-2.803-3.05-7.547-3.252-10.597-0.449 c-3.05,2.803-3.251,7.547-0.449,10.598c16.127,17.554,28.134,37.834,35.686,60.276c1.054,3.133,3.976,5.11,7.107,5.11 c0.793,0,1.6-0.127,2.393-0.394C409.16,197.282,411.272,193.029,409.951,189.104z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M295.247,73.822c-3.917-1.341-8.183,0.748-9.524,4.668c-1.341,3.919,0.749,8.183,4.668,9.523 c16.538,5.659,32.065,13.857,46.15,24.369c1.347,1.005,2.92,1.489,4.48,1.489c2.286,0,4.544-1.041,6.017-3.015 c2.478-3.319,1.794-8.019-1.525-10.496C330.176,88.916,313.264,79.986,295.247,73.822z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M119.442,125.908C150.991,95.659,192.377,79,235.976,79c8.096,0,16.237,0.583,24.196,1.731 c4.103,0.598,7.903-2.252,8.495-6.352c0.592-4.1-2.251-7.902-6.351-8.494C253.648,64.635,244.786,64,235.976,64 c-47.487,0-92.56,18.141-126.915,51.081c-34.248,32.838-54.277,76.905-56.397,124.084c-0.186,4.138,3.018,7.644,7.155,7.829 c0.115,0.006,0.229,0.008,0.343,0.008c3.987,0,7.306-3.14,7.487-7.163C69.594,196.527,87.988,156.066,119.442,125.908z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M235.976,32c-16.772,0-33.485,1.944-49.674,5.778c-4.031,0.954-6.524,4.996-5.57,9.026c0.955,4.03,4.997,6.524,9.027,5.569 C204.817,48.809,220.366,47,235.976,47c54.996,0,106.332,21.911,144.55,61.695c1.473,1.533,3.439,2.305,5.41,2.305 c1.869,0,3.741-0.694,5.195-2.091c2.987-2.87,3.083-7.618,0.213-10.604c-19.913-20.729-43.304-37.036-69.522-48.465 C294.666,38.002,265.783,32,235.976,32z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M67.507,125.404c1.372,1.074,3.001,1.595,4.619,1.595c2.227,0,4.431-0.987,5.91-2.876 c21.375-27.302,49.515-48.717,81.377-61.932c3.826-1.587,5.642-5.975,4.055-9.801s-5.977-5.644-9.801-4.055 c-34.241,14.201-64.478,37.21-87.441,66.539C63.672,118.137,64.246,122.851,67.507,125.404z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M131.983,38.725c1.094,0,2.205-0.24,3.255-0.748C166.816,22.73,200.709,15,235.976,15c18.378,0,36.682,2.162,54.401,6.426 c4.025,0.966,8.077-1.51,9.046-5.537c0.969-4.027-1.51-8.078-5.538-9.047C275.019,2.302,255.535,0,235.976,0 c-37.544,0-73.631,8.232-107.259,24.469c-3.73,1.801-5.294,6.285-3.493,10.015C126.517,37.163,129.195,38.725,131.983,38.725z" />
<path fill="none" stroke="#FFFFFF" stroke-width="6" d="M321.724,31.383c7.732,3.079,15.385,6.619,22.746,10.52c1.119,0.594,2.321,0.875,3.505,0.875 c2.688,0,5.287-1.449,6.633-3.99c1.939-3.66,0.545-8.199-3.115-10.139c-7.837-4.153-15.986-7.922-24.22-11.201 c-3.849-1.533-8.21,0.345-9.743,4.192C315.998,25.488,317.876,29.851,321.724,31.383z" />
</svg>`,
Keytronic:
`<g>
<g>
<path fill="none" stroke-width="6" d="M478.665,72c0-39.704-32.296-72-72-72c-19.704,0-38.496,8.184-52,22.288C341.161,8.184,322.369,0,302.665,0 c-39.704,0-72,32.296-72,72c0,24.752,12.456,47.36,33.376,60.688L275.353,144L134.665,284.688l-26.344-26.344 c-3.128-3.128-8.184-3.128-11.312,0l-32,32c-3.128,3.128-3.128,8.184,0,11.312L91.353,328l-12.688,12.688l-26.344-26.344 c-3.128-3.128-8.184-3.128-11.312,0l-33,33c-3.128,3.128-3.128,8.184,0,11.312L34.353,385L4.345,415.008 c-3.128,3.128-3.128,8.184,0,11.312l52,52c1.56,1.56,3.608,2.344,5.656,2.344s4.096-0.784,5.656-2.344l51.008-51.008 l26.344,26.344c3.128,3.128,8.184,3.128,11.312,0l40-40c3.128-3.128,3.128-8.184,0-11.312L169.977,376l168.688-168.688 l7.312,7.312C359.305,235.544,381.913,248,406.665,248c39.704,0,72-32.296,72-72c0-19.704-8.184-38.496-22.288-52 C470.481,110.496,478.665,91.704,478.665,72z M462.665,176c0,30.872-25.128,56-56,56c-19.488,0-37.272-9.944-47.584-26.6 c-0.328-0.52-0.712-1.008-1.152-1.448l-13.608-13.608c-3.128-3.128-8.184-3.128-11.312,0l-180,180 c-3.128,3.128-3.128,8.184,0,11.312L179.353,408l-28.688,28.688l-26.344-26.344c-3.128-3.128-8.184-3.128-11.312,0l-51.008,51.008 l-40.688-40.688l30.008-30.008c3.128-3.128,3.128-8.184,0-11.312L24.977,353l21.688-21.688l26.344,26.344 c3.128,3.128,8.184,3.128,11.312,0l24-24c3.128-3.128,3.128-8.184,0-11.312L81.977,296l20.688-20.688l26.344,26.344 c3.128,3.128,8.184,3.128,11.312,0l152-152c3.128-3.128,3.128-8.184,0-11.312l-17.608-17.608c-0.44-0.44-0.92-0.824-1.448-1.152 c-16.656-10.312-26.6-28.096-26.6-47.584c0-30.872,25.128-56,56-56c17.96,0,34.968,8.768,45.504,23.456c3,4.184,10,4.184,13,0 C371.697,24.768,388.705,16,406.665,16c30.872,0,56,25.128,56,56c0,17.96-8.768,34.968-23.456,45.504 c-2.096,1.504-3.336,3.92-3.336,6.496s1.24,5,3.336,6.496C453.897,141.032,462.665,158.04,462.665,176z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<rect fill="none" stroke-width="6" x="173.811" y="228.009" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -91.1265 252.0189)" width="169.678" height="16" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<rect fill="none" stroke-width="6" x="163.35" y="311.983" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -175.1045 217.2252)" width="22.624" height="16" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M406.665,40c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S424.313,40,406.665,40z M406.665,88 c-8.824,0-16-7.176-16-16s7.176-16,16-16c8.824,0,16,7.176,16,16S415.489,88,406.665,88z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<rect fill="none" stroke-width="6" x="310.663" y="92.674" transform="matrix(0.7071 -0.7071 0.7071 0.7071 19.8046 255.7854)" width="16" height="22.624" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<rect fill="none" stroke-width="6" x="342.661" y="124.674" transform="matrix(0.7071 -0.7071 0.7071 0.7071 6.5493 287.7842)" width="16" height="22.624" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<rect fill="none" stroke-width="6" x="374.659" y="156.674" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.706 319.7831)" width="16" height="22.624" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M470.665,344h-14.032c-0.44-1.112-0.896-2.216-1.392-3.328l9.928-9.928c3.128-3.128,3.128-8.184,0-11.312l-33.936-33.936 c-3.128-3.128-8.184-3.128-11.312,0l-9.928,9.928c-1.112-0.496-2.216-0.952-3.328-1.392V280c0-4.424-3.576-8-8-8h-48 c-4.424,0-8,3.576-8,8v14.032c-1.112,0.44-2.216,0.896-3.328,1.392l-9.928-9.928c-3.128-3.128-8.184-3.128-11.312,0 l-33.936,33.936c-3.128,3.128-3.128,8.184,0,11.312l9.928,9.928c-0.496,1.112-0.952,2.216-1.392,3.328h-14.032 c-4.424,0-8,3.576-8,8v48c0,4.424,3.576,8,8,8h14.032c0.44,1.112,0.896,2.216,1.392,3.328l-9.928,9.928 c-3.128,3.128-3.128,8.184,0,11.312l33.936,33.936c3.128,3.128,8.184,3.128,11.312,0l9.928-9.928 c1.112,0.496,2.216,0.952,3.328,1.392V472c0,4.424,3.576,8,8,8h48c4.424,0,8-3.576,8-8v-14.032 c1.112-0.44,2.216-0.896,3.328-1.392l9.928,9.928c3.128,3.128,8.184,3.128,11.312,0l33.936-33.936 c3.128-3.128,3.128-8.184,0-11.312l-9.928-9.928c0.496-1.112,0.952-2.216,1.392-3.328h14.032c4.424,0,8-3.576,8-8v-48 C478.665,347.576,475.089,344,470.665,344z M462.665,392h-11.672c-3.496,0-6.576,2.264-7.632,5.592 c-1.216,3.864-2.856,7.8-4.88,11.672c-1.616,3.104-1.032,6.888,1.44,9.36l8.288,8.288l-22.624,22.624l-8.288-8.288 c-2.472-2.472-6.256-3.056-9.36-1.44c-3.872,2.024-7.808,3.664-11.672,4.88c-3.336,1.064-5.6,4.144-5.6,7.64V464h-32v-11.672 c0-3.496-2.264-6.576-5.592-7.632c-3.864-1.216-7.8-2.856-11.672-4.88c-3.104-1.616-6.88-1.032-9.36,1.44l-8.288,8.288 l-22.624-22.624l8.288-8.288c2.472-2.472,3.056-6.256,1.44-9.36c-2.024-3.872-3.664-7.808-4.88-11.672 c-1.064-3.336-4.144-5.6-7.64-5.6h-11.672v-32h11.672c3.496,0,6.576-2.264,7.632-5.592c1.216-3.864,2.856-7.8,4.88-11.672 c1.616-3.104,1.032-6.888-1.44-9.36l-8.288-8.288l22.624-22.624l8.288,8.288c2.48,2.48,6.256,3.048,9.36,1.44 c3.872-2.024,7.808-3.664,11.672-4.88c3.336-1.064,5.6-4.144,5.6-7.64V288h32v11.672c0,3.496,2.264,6.576,5.592,7.632 c3.864,1.216,7.8,2.856,11.672,4.88c3.104,1.608,6.888,1.04,9.36-1.44l8.288-8.288l22.624,22.624l-8.288,8.288 c-2.472,2.472-3.056,6.256-1.44,9.36c2.024,3.872,3.664,7.808,4.88,11.672c1.064,3.336,4.144,5.6,7.64,5.6h11.672V392z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M374.665,328c-26.472,0-48,21.528-48,48s21.528,48,48,48s48-21.528,48-48S401.137,328,374.665,328z M374.665,408 c-17.648,0-32-14.352-32-32s14.352-32,32-32s32,14.352,32,32S392.313,408,374.665,408z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M54.665,168h-16c0,13.232-10.768,24-24,24v16c13.232,0,24,10.768,24,24h16c0-13.232,10.768-24,24-24v-16 C65.433,192,54.665,181.232,54.665,168z M46.665,208.248c-2.336-3.144-5.104-5.912-8.248-8.248 c3.144-2.336,5.912-5.104,8.248-8.248c2.336,3.144,5.104,5.912,8.248,8.248C51.769,202.336,49.001,205.104,46.665,208.248z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M150.665,120h-16c0,13.232-10.768,24-24,24v16c13.232,0,24,10.768,24,24h16c0-13.232,10.768-24,24-24v-16 C161.433,144,150.665,133.232,150.665,120z M142.665,160.248c-2.336-3.144-5.104-5.912-8.248-8.248 c3.144-2.336,5.912-5.104,8.248-8.248c2.336,3.144,5.104,5.912,8.248,8.248C147.769,154.336,145.001,157.104,142.665,160.248z" stroke="#FFFFFF"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke-width="6" d="M70.665,48h-16c0,13.232-10.768,24-24,24v16c13.232,0,24,10.768,24,24h16c0-13.232,10.768-24,24-24V72 C81.433,72,70.665,61.232,70.665,48z M62.665,88.248c-2.336-3.144-5.104-5.912-8.248-8.248c3.144-2.336,5.912-5.104,8.248-8.248 c2.336,3.144,5.104,5.912,8.248,8.248C67.769,82.336,65.001,85.104,62.665,88.248z" stroke="#FFFFFF"/>
</g>
</g>
`,
Molectron: `
<path stroke="#FFFFFF" fill="none" stroke-width="6" d="m398.559,166.02c-8.85-3.404-18.292-6.493-28.22-9.265 2.563-9.984 4.609-19.706 6.087-29.073 7.689-48.757-0.808-82.959-23.925-96.306-6.72-3.88-14.443-5.848-22.954-5.848-26.882,0-60.85,19.965-95.118,53.681-7.486-7.352-15.006-14.105-22.502-20.167-38.379-31.038-72.25-40.781-95.365-27.434-14.856,8.577-23.891,26.093-26.126,50.652-0.376,4.125 2.664,7.773 6.789,8.148 4.138,0.382 7.772-2.664 8.148-6.789 1.238-13.594 5.484-31.398 18.688-39.021 17.11-9.881 45.699-0.365 78.434,26.106 7.143,5.776 14.314,12.217 21.461,19.233-14.373,15.293-28.676,32.894-42.41,52.347-24.16,2.199-47.172,5.888-68.291,10.948-3.698-14.376-6.238-28.093-7.491-40.827-0.405-4.122-4.059-7.134-8.198-6.729-4.122,0.405-7.135,4.076-6.729,8.198 1.326,13.474 4.008,27.966 7.917,43.133-9.596,2.706-18.73,5.712-27.311,9.012-46.072,17.72-71.443,42.18-71.443,68.873s25.371,51.153 71.441,68.872c8.85,3.404 18.292,6.493 28.22,9.265-2.563,9.984-4.609,19.706-6.087,29.073-7.689,48.757 0.808,82.959 23.925,96.306 6.72,3.88 14.443,5.848 22.954,5.848 26.573,0 60.071-19.516 93.938-52.531 7.255,7.086 14.54,13.609 21.803,19.482 27.161,21.966 52.059,33.266 72.489,33.265 8.438-0.001 16.119-1.93 22.876-5.831 23.117-13.347 31.614-47.549 23.925-96.306-1.477-9.366-3.523-19.087-6.086-29.07 15.439-4.252 29.64-9.26 42.218-14.96 3.773-1.71 5.445-6.154 3.735-9.927-1.71-3.773-6.155-5.446-9.927-3.735-11.912,5.398-25.377,10.15-40.042,14.192-6.063-20.261-14.137-41.412-23.976-62.808 10.281-22.122 18.685-44.004 24.943-64.936 55.665,15.586 88.651,40.202 88.651,63.801 0,15.247-13.296,27.827-24.45,35.694-3.385,2.388-4.193,7.067-1.806,10.452 2.388,3.386 7.067,4.193 10.452,1.806 20.153-14.215 30.804-30.797 30.804-47.952 0-26.693-25.371-51.153-71.441-68.872zm-69.013-125.491c5.844,7.10543e-15 11.044,1.291 15.454,3.838 17.112,9.88 23.166,39.396 16.607,80.979-1.405,8.907-3.35,18.159-5.789,27.669-21.207-5.028-44.299-8.68-68.532-10.835-13.596-19.242-27.866-36.839-42.375-52.253 2.655-2.618 5.312-5.158 7.964-7.602 29.252-26.953 56.48-41.796 76.671-41.796zm-95.096,60.152c11.317,12.062 22.5,25.517 33.323,40.102-10.769-0.587-21.712-0.891-32.773-0.891-11.431,0-22.738,0.321-33.855,0.947 10.808-14.56 22.006-28.07 33.305-40.158zm-.053,269.657c-11.718-12.42-23.296-26.341-34.486-41.466 11.514,0.674 23.234,1.02 35.089,1.02 11.419,0 22.732-0.333 33.871-0.969-11.18,15.064-22.777,29.01-34.474,41.415zm.603-55.446c-16.115,0-31.578-0.624-46.314-1.784-8.277-12.076-16.284-24.78-23.907-37.984-7.503-12.995-14.405-26.107-20.657-39.155 6.49-13.661 13.707-27.412 21.596-41.077 7.64-13.232 15.75-26.063 24.177-38.307 14.374-1.099 29.429-1.693 45.105-1.693 15.273,0 29.956,0.564 43.994,1.609 8.434,12.267 16.59,25.185 24.349,38.623 7.85,13.597 15.034,27.279 21.5,40.873-6.219,12.942-13.091,25.957-20.56,38.894-7.625,13.207-15.72,26.015-24.13,38.239-14.716,1.158-29.83,1.762-45.153,1.762zm-65.615-3.655c-18.453-2.132-35.582-5.129-51.205-8.81 4.744-15.789 10.758-32.16 17.929-48.79 4.898,9.688 10.128,19.373 15.679,28.987 5.668,9.818 11.549,19.371 17.597,28.613zm1.19-152.829c-6.111,9.318-12.078,18.991-17.847,28.984-5.933,10.276-11.499,20.61-16.677,30.928-7.543-17.318-13.858-34.376-18.788-50.749 16.203-3.859 34.042-6.983 53.312-9.163zm-155.575,76.484c0-23.472 32.634-47.951 87.757-63.55 6.235,20.802 14.601,42.62 24.805,64.647-9.813,21.362-17.865,42.477-23.913,62.705-55.663-15.587-88.649-40.203-88.649-63.802zm125.454,194.363c-5.844,0-11.044-1.291-15.454-3.838-17.112-9.88-23.166-39.396-16.607-80.979 1.405-8.907 3.35-18.159 5.789-27.669 20.518,4.865 42.8,8.441 66.173,10.619 13.951,19.807 28.618,37.883 43.53,53.648-2.254,2.201-4.509,4.348-6.76,6.423-29.252,26.954-56.48,41.796-76.671,41.796zm220.214-84.584c6.559,41.583 0.505,71.099-16.607,80.979-17.113,9.879-45.699,0.364-78.434-26.106-6.893-5.574-13.814-11.767-20.712-18.499 14.761-15.578 29.462-33.603 43.563-53.579 23.432-2.151 45.822-5.697 66.389-10.509 2.445,9.526 4.394,18.793 5.801,27.714zm-9.83-42.153c-16.064,3.733-33.311,6.67-51.339,8.745 6.085-9.283 12.027-18.918 17.773-28.871 5.517-9.556 10.713-19.161 15.579-28.757 7.195,16.66 13.228,33.063 17.987,48.883zm-17.918-84.145c-5.152-10.259-10.688-20.532-16.587-30.749-5.818-10.078-11.859-19.878-18.077-29.348 19.355,2.146 37.276,5.243 53.564,9.081-4.955,16.493-11.302,33.623-18.9,51.016z"/>
<path stroke="#FFFFFF" fill="none" stroke-width="6" d="m235,197.392c-20.678,0-37.5,16.822-37.5,37.5s16.822,37.5 37.5,37.5 37.5-16.822 37.5-37.5-16.822-37.5-37.5-37.5zm0,60c-12.406,0-22.5-10.094-22.5-22.5s10.094-22.5 22.5-22.5 22.5,10.094 22.5,22.5-10.094,22.5-22.5,22.5z"/>
`
}