diff --git a/cfg_locale b/cfg_locale deleted file mode 120000 index 73cc88f..0000000 --- a/cfg_locale +++ /dev/null @@ -1 +0,0 @@ -cfg_freeplanet.app/ \ No newline at end of file diff --git a/package.json b/package.json index eaca40a..38e5405 100755 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "dependencies": { "@babel/plugin-transform-runtime": "^7.4.0", "@babel/runtime": "^7.0.0", - "@quasar/extras": "^1.1.2", + "@quasar/extras": "^1.3.2", "@types/vuelidate": "^0.7.0", "@vue/eslint-config-standard": "^4.0.0", "acorn": "^6.0.0", "autoprefixer": "^9.5.0", - "axios": "^0.18.0", + "axios": "^0.19.0", "babel-eslint": "^10.0.1", "bcrypt-nodejs": "0.0.3", "bcryptjs": "^2.4.3", @@ -44,13 +44,13 @@ "graphql": "^0.13.2", "graphql-tag": "^2.8.0", "gsap": "^2.0.2", - "jquery": "^3.3.1", + "jquery": "^3.4.1", "js-cookie": "^2.2.0", "localforage": "^1.7.3", "normalize.css": "^8.0.0", - "npm": "^6.9.0", + "npm": "^6.10.1", "nprogress": "^0.2.0", - "quasar": "^1.0.0-beta.21", + "quasar": "^1.1.6", "quasar-extras": "^2.0.8", "register-service-worker": "^1.0.0", "vee-validate": "^2.1.2", @@ -85,7 +85,8 @@ "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-import-meta": "^7.2.0", "@babel/preset-env": "^7.4.2", - "@quasar/app": "^1.0.0-beta.22", + "@quasar/app": "^1.1.2", + "@quasar/quasar-app-extension-colorize": "^1.0.0-alpha.1", "@quasar/quasar-app-extension-typescript": "^1.0.0-alpha.11", "@types/dotenv": "^4.0.3", "@types/jest": "^23.1.4", @@ -98,8 +99,8 @@ "@vue/cli-plugin-e2e-cypress": "^3.0.1", "@vue/cli-plugin-pwa": "^3.0.1", "@vue/cli-plugin-typescript": "^3.0.1", - "@vue/cli-plugin-unit-jest": "^3.5.3", - "@vue/cli-service": "^3.0.1", + "@vue/cli-plugin-unit-jest": "^3.9.0", + "@vue/cli-service": "^3.9.2", "@vue/test-utils": "^1.0.0-beta.20", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^24.5.0", diff --git a/quasar.conf.js b/quasar.conf.js index 4b46c4e..efab0d7 100644 --- a/quasar.conf.js +++ b/quasar.conf.js @@ -134,11 +134,17 @@ module.exports = function (ctx) { 'QToolbarTitle', 'QBtn', 'QBtnDropdown', + 'QColor', 'QIcon', 'QList', 'QItemLabel', 'QItem', 'QCard', + 'QMarkupTable', + 'QSpace', + 'QDialog', + 'QBadge', + 'QForm', 'QCardSection', 'QCardActions', 'QField', @@ -173,6 +179,12 @@ module.exports = function (ctx) { 'QImg', 'QSplitter', 'QRating', + 'QParallax', + 'QTab', + 'QTabs', + 'QTabPanels', + 'QTabPanel', + 'QTree', 'QSeparator' ], directives: [ diff --git a/src/App.scss b/src/App.scss index bb8b4f2..11310ea 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,3 +1,44 @@ +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; } @@ -73,3 +114,201 @@ 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; + } +} diff --git a/src/App.ts b/src/App.ts index 6602178..479254e 100644 --- a/src/App.ts +++ b/src/App.ts @@ -7,10 +7,14 @@ import { Header } from './components/Header' import globalroutines from './globalroutines/index' import { GlobalStore } from './store/Modules' +import { toolsext } from '@src/store/Modules/toolsext' +import { BannerCookies, CPreloadImages } from '@components' +import { static_data } from '@src/db/static_data' @Component({ components: { - appHeader: Header + appHeader: Header, + BannerCookies, CPreloadImages }, router }) @@ -47,7 +51,7 @@ export default class App extends Vue { // console.log('window.location.href', window.location.href) let chiamaautologin = true - this.listaRoutingNoLogin.forEach(mystr => { + this.listaRoutingNoLogin.forEach((mystr) => { if (window.location.href.includes(mystr)) { chiamaautologin = false } @@ -59,9 +63,9 @@ export default class App extends Vue { .then((loadstorage) => { if (loadstorage) { - if (UserStore.state.lang !== '') { + if (toolsext.getLocale() !== '') { // console.log('SETLOCALE :', this.$i18n.locale) - this.$i18n.locale = UserStore.state.lang // Set Lang + this.$i18n.locale = toolsext.getLocale() // Set Lang } else { UserStore.mutations.setlang(this.$i18n.locale) } @@ -81,5 +85,7 @@ export default class App extends Vue { } - + get static_data() { + return static_data + } } diff --git a/src/App.vue b/src/App.vue index d0403c1..68ecb38 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,6 +5,10 @@ + + + + @@ -12,6 +16,7 @@ + + + + diff --git a/src/components/BannerCookies/index.ts b/src/components/BannerCookies/index.ts new file mode 100644 index 0000000..a4547f2 --- /dev/null +++ b/src/components/BannerCookies/index.ts @@ -0,0 +1 @@ +export {default as BannerCookies} from './BannerCookies.vue' diff --git a/src/components/CBook/CBook.scss b/src/components/CBook/CBook.scss new file mode 100644 index 0000000..8b6ae01 --- /dev/null +++ b/src/components/CBook/CBook.scss @@ -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; + } +} diff --git a/src/components/CBook/CBook.ts b/src/components/CBook/CBook.ts new file mode 100644 index 0000000..e6c180a --- /dev/null +++ b/src/components/CBook/CBook.ts @@ -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: '' + } + } + } + +} diff --git a/src/components/CBook/CBook.vue b/src/components/CBook/CBook.vue new file mode 100644 index 0000000..c99babb --- /dev/null +++ b/src/components/CBook/CBook.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/components/CBook/index.ts b/src/components/CBook/index.ts new file mode 100644 index 0000000..a3d83ad --- /dev/null +++ b/src/components/CBook/index.ts @@ -0,0 +1 @@ +export {default as CBook} from './CBook.vue' diff --git a/src/components/CCard/CCard.scss b/src/components/CCard/CCard.scss new file mode 100644 index 0000000..8b6ae01 --- /dev/null +++ b/src/components/CCard/CCard.scss @@ -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; + } +} diff --git a/src/components/CCard/CCard.ts b/src/components/CCard/CCard.ts new file mode 100644 index 0000000..a6a937b --- /dev/null +++ b/src/components/CCard/CCard.ts @@ -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: '' + } + } + } + +} diff --git a/src/components/CCard/CCard.vue b/src/components/CCard/CCard.vue new file mode 100644 index 0000000..bbf1959 --- /dev/null +++ b/src/components/CCard/CCard.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/CCard/index.ts b/src/components/CCard/index.ts new file mode 100644 index 0000000..6c5c840 --- /dev/null +++ b/src/components/CCard/index.ts @@ -0,0 +1 @@ +export {default as CCard} from './CCard.vue' diff --git a/src/components/CImgText/CImgText.scss b/src/components/CImgText/CImgText.scss new file mode 100644 index 0000000..dc75c16 --- /dev/null +++ b/src/components/CImgText/CImgText.scss @@ -0,0 +1,79 @@ + +.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: 1600px) { + .myclimg { + max-height: 550px !important; + width: 100%; + } +} + +@media (max-width: 1000px) { + .myclimg { + max-height: 450px !important; + width: 100%; + } +} + +@media (max-width: 800px) { + .myclimg { + max-height: 400px !important; + } +} + + +@media (max-width: 400px) { + .myclimg { + // height: inherit !important; + } + + // 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; +} diff --git a/src/components/CImgText/CImgText.ts b/src/components/CImgText/CImgText.ts new file mode 100644 index 0000000..81926c6 --- /dev/null +++ b/src/components/CImgText/CImgText.ts @@ -0,0 +1,31 @@ +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 src2: string + @Prop({ required: false, default: 'myclimg' }) public class1: string + @Prop({ required: false, default: '' }) public style1: string +} diff --git a/src/components/CImgText/CImgText.vue b/src/components/CImgText/CImgText.vue new file mode 100644 index 0000000..5d81384 --- /dev/null +++ b/src/components/CImgText/CImgText.vue @@ -0,0 +1,21 @@ + + + + diff --git a/src/components/CImgText/index.ts b/src/components/CImgText/index.ts new file mode 100644 index 0000000..a6f22a8 --- /dev/null +++ b/src/components/CImgText/index.ts @@ -0,0 +1 @@ +export {default as CImgText} from './CImgText.vue' diff --git a/src/components/CPage/CPage.scss b/src/components/CPage/CPage.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/components/CPage/CPage.ts b/src/components/CPage/CPage.ts new file mode 100644 index 0000000..1d16cac --- /dev/null +++ b/src/components/CPage/CPage.ts @@ -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 = '' +} diff --git a/src/components/CPage/CPage.vue b/src/components/CPage/CPage.vue new file mode 100644 index 0000000..9646e04 --- /dev/null +++ b/src/components/CPage/CPage.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/components/CPage/index.ts b/src/components/CPage/index.ts new file mode 100644 index 0000000..bb5e7cb --- /dev/null +++ b/src/components/CPage/index.ts @@ -0,0 +1 @@ +export {default as CPage} from './CPage.vue' diff --git a/src/components/CTitle/CTitle.scss b/src/components/CTitle/CTitle.scss new file mode 100644 index 0000000..abe3fa4 --- /dev/null +++ b/src/components/CTitle/CTitle.scss @@ -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; +} diff --git a/src/components/CTitle/CTitle.ts b/src/components/CTitle/CTitle.ts new file mode 100644 index 0000000..d30fbe1 --- /dev/null +++ b/src/components/CTitle/CTitle.ts @@ -0,0 +1,29 @@ +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: false, default: '' }) public sizes: string + @Prop({ required: true }) public headtitle: string + + get tools() { + return tools + } + + get getsrc() { + // return this.src + const filefull = tools.getimgFullpathbysize(this.imgbackground) + + return tools.getimgbysize(filefull.path, filefull.file) + } + +} diff --git a/src/components/CTitle/CTitle.vue b/src/components/CTitle/CTitle.vue new file mode 100644 index 0000000..699b130 --- /dev/null +++ b/src/components/CTitle/CTitle.vue @@ -0,0 +1,27 @@ + + + + diff --git a/src/components/CTitle/index.ts b/src/components/CTitle/index.ts new file mode 100644 index 0000000..00ca081 --- /dev/null +++ b/src/components/CTitle/index.ts @@ -0,0 +1 @@ +export {default as CTitle} from './CTitle.vue' diff --git a/src/components/Footer/Footer.scss b/src/components/Footer/Footer.scss new file mode 100644 index 0000000..addaaae --- /dev/null +++ b/src/components/Footer/Footer.scss @@ -0,0 +1,185 @@ +$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; +} + +.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 { + color: #999; + letter-spacing: normal !important; +} + +.footer_link { + font-size: 1rem; + color:gray; +} + +.footer_link:hover { + color:white; +} diff --git a/src/components/Footer/Footer.ts b/src/components/Footer/Footer.ts new file mode 100644 index 0000000..6424bc3 --- /dev/null +++ b/src/components/Footer/Footer.ts @@ -0,0 +1,49 @@ +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 tools() { + return tools + } + + get mythis() { + return this + } + + get TelegramSupport() { + return db_data.TELEGRAM_SUPPORT + } + + get FBPage() { + return db_data.URL_FACEBOOK + } + + get InstagramPage() { + return db_data.URL_INSTAGRAM + } + + get static_data(){ + return static_data + } +} diff --git a/src/components/Footer/Footer.vue b/src/components/Footer/Footer.vue new file mode 100644 index 0000000..f1810d0 --- /dev/null +++ b/src/components/Footer/Footer.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/Footer/index.ts b/src/components/Footer/index.ts new file mode 100644 index 0000000..bd2039c --- /dev/null +++ b/src/components/Footer/index.ts @@ -0,0 +1 @@ +export {default as Footer} from './Footer.vue' diff --git a/src/components/FormNewsletter/FormNewsletter.scss b/src/components/FormNewsletter/FormNewsletter.scss new file mode 100644 index 0000000..1f76c9d --- /dev/null +++ b/src/components/FormNewsletter/FormNewsletter.scss @@ -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; +} diff --git a/src/components/FormNewsletter/FormNewsletter.ts b/src/components/FormNewsletter/FormNewsletter.ts new file mode 100644 index 0000000..9e81c92 --- /dev/null +++ b/src/components/FormNewsletter/FormNewsletter.ts @@ -0,0 +1,96 @@ +import Vue from 'vue' +import Component from 'vue-class-component' + +import { tools } from '@src/store/Modules/tools' +import { toolsext } from '@src/store/Modules/toolsext' + +import Quasar, { Screen } from 'quasar' +import { Prop } from 'vue-property-decorator' +import { Api } from '../../store' +import { serv_constants } from '../../store/Modules/serv_constants' + +@Component({ + name: 'FormNewsletter' +}) + +export default class FormNewsletter extends Vue { + public $t + public $q + public name: string = null + public surname: string = null + public email: string = null + public accept: boolean = false + + @Prop() public idwebsite: string + @Prop() public locale: string + + get tools() { + return tools + } + + public async onSubmit() { + + if (this.accept !== true) { + this.$q.notify({ + color: 'red-5', + textColor: 'white', + icon: 'fas fa-exclamation-triangle', + message: this.$t('newsletter.license') + }) + } + else { + const usertosend = { + email: this.email, + firstName: this.name, + lastName: this.surname, + idwebsite: this.idwebsite, + locale: this.locale + } + console.log(usertosend) + + return await Api.SendReq('/signup_news', 'POST', usertosend, false) + .then((res) => { + + if (res.data.result === serv_constants.RIS_SUBSCRIBED_OK) { + this.$q.notify({ + color: 'green-4', + textColor: 'white', + icon: 'fas fa-check-circle', + // message: this.$t('newsletter.submitted') + message: res.data.msg + }) + } else if (res.data.result === serv_constants.RIS_SUBSCRIBED_ALREADYEXIST) { + this.$q.notify({ + color: 'orange-4', + textColor: 'white', + icon: 'fas fa-check-circle', + // message: this.$t('newsletter.submitted') + message: res.data.msg + }) + } else { + this.$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 + }) + } + } + + public onReset() { + this.name = null + this.surname = null + this.email = null + this.accept = false + } + + +} diff --git a/src/components/FormNewsletter/FormNewsletter.vue b/src/components/FormNewsletter/FormNewsletter.vue new file mode 100644 index 0000000..8fbcc2c --- /dev/null +++ b/src/components/FormNewsletter/FormNewsletter.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/components/FormNewsletter/index.ts b/src/components/FormNewsletter/index.ts new file mode 100644 index 0000000..8cd7c70 --- /dev/null +++ b/src/components/FormNewsletter/index.ts @@ -0,0 +1 @@ +export {default as FormNewsletter} from './FormNewsletter.vue' diff --git a/src/components/Header/Header.scss b/src/components/Header/Header.scss index 7adbb8e..c067d83 100644 --- a/src/components/Header/Header.scss +++ b/src/components/Header/Header.scss @@ -286,3 +286,12 @@ canvas { 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; +} diff --git a/src/components/Header/Header.ts b/src/components/Header/Header.ts index 4e37eeb..72037d2 100644 --- a/src/components/Header/Header.ts +++ b/src/components/Header/Header.ts @@ -11,6 +11,7 @@ import { tools } from '../../store/Modules/tools' import { toolsext } from '@src/store/Modules/toolsext' import Quasar, { Screen } from 'quasar' +import { static_data } from '../../db/static_data' @Component({ name: 'Header', @@ -37,12 +38,6 @@ export default class Header extends Vue { public photo = '' public visuimg: boolean = true - public selectOpLang = [ - { label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../statics/images/gb.png', short: 'EN' }, - { label: 'Español', icon: 'fa-flag-es', value: 'es', image: '../statics/images/es.png', short: 'ES' }, - { label: 'Italiano', icon: 'fa-facebook', value: 'it', image: '../statics/images/it.png', short: 'IT' } - // { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../statics/images/de.png', short: 'DE' }, - ] get getappname(){ if (Screen.width < 400) { @@ -73,12 +68,12 @@ export default class Header extends Vue { } // ------------------------------------------------------------------------- - // QUASAR Example using event to open drawer from another component or page + // QUASAR Example using myevent to open drawer from another component or page // ------------------------------------------------------------------------- // (1) This code is inside layout file that have a drawer // if this.leftDrawerOpen is true, drawer is displayed - // (2) Listen for an event in created + // (2) Listen for an myevent in created /* created(){ this.$root.$on("openLeftDrawer", this.openLeftDrawercb); }, @@ -90,7 +85,7 @@ export default class Header extends Vue { } } - // (4) In another component or page, emit the event! + // (4) In another component or page, emit the myevent! // Call the method when clicking button etc. methods: { openLeftDrawer() { @@ -165,14 +160,17 @@ export default class Header extends Vue { const color = (value === 'online') ? 'positive' : 'warning' - if (!!oldValue) { - tools.showNotif(this.$q, this.$t('connection') + ` ${value}`, { - color, - icon: 'wifi' - }) - } + if (this.static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) { - this.changeIconConn() + if (!!oldValue) { + tools.showNotif(this.$q, this.$t('connection') + ` ${value}`, { + color, + icon: 'wifi' + }) + } + + this.changeIconConn() + } } } @@ -203,10 +201,10 @@ export default class Header extends Vue { } public setshortlang(lang) { - for (const indrec in this.selectOpLang) { - if (this.selectOpLang[indrec].value === lang) { - // console.log('this.selectOpLang[indrec].short', this.selectOpLang[indrec].short, this.selectOpLang[indrec].value) - this.langshort = this.selectOpLang[indrec].short + 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) + this.langshort = static_data.lang_available[indrec].short return } } @@ -218,7 +216,7 @@ export default class Header extends Vue { } public setLangAtt(mylang) { - console.log('MYLL=', mylang) + console.log('LANG =', mylang) // console.log('PRIMA this.$q.lang.isoName', this.$q.lang.isoName) // dynamic import, so loading on demand only @@ -316,6 +314,12 @@ export default class Header extends Vue { get Username() { return UserStore.state.username } + get Name() { + return UserStore.state.name + } + get Surname() { + return UserStore.state.surname + } get Verificato() { return UserStore.state.verified_email @@ -337,4 +341,8 @@ export default class Header extends Vue { tools.showNotif(this.$q, this.$t('logout.uscito'), {icon: 'exit_to_app'}) }) } + + get static_data(){ + return static_data + } } diff --git a/src/components/Header/Header.vue b/src/components/Header/Header.vue index 9799886..45cf3d2 100644 --- a/src/components/Header/Header.vue +++ b/src/components/Header/Header.vue @@ -1,6 +1,6 @@ + + + diff --git a/src/views/pages/estimate/index.ts b/src/views/pages/estimate/index.ts new file mode 100644 index 0000000..2594d34 --- /dev/null +++ b/src/views/pages/estimate/index.ts @@ -0,0 +1 @@ +export {default as estimate} from './estimate.vue'