ed.brz9.dev/proj/map/asset/js/main.js

223 lines
6.2 KiB
JavaScript

const dburl = "http://localhost:3000/db"
//const dburl = "https://ed.brz9.dev/proj/map/asset/json/db.json"
Vue.component('Accordeon', {
template : `
<section v-bind:id="this.list.id">
<nav v-if="this.list.type === 'list'">
<a v-bind:href="this.href">
<span
v-on:click="toggleActive()"
class="listname"
:class="{ active: isActive }">
<h3 class="b9h-lang-fr">{{ this.list.nameFR }}</h3>
<h3 class="b9h-lang-en">{{ this.list.nameEN }}</h3>
<h3 class="b9h-lang-it">{{ this.list.nameIT }}</h3>
<span class="byl-icon-chevron-down listicon">
</span>
</a>
<section class="listchild" :class="{ active: isActive }">
<Accordeon v-for="i in this.list.sub" v-bind:list="i"></Accordeon>
</section>
</nav>
<section v-if="this.list.type === 'item'" class="lastlistitem">
<aside>
<img v-bind:src="this.list.img"></img>
</aside>
<aside class="txt">
<h3>{{ this.list.name }}</h3>
<p class="b9h-lang-fr">{{ this.list.txtFR }}</p>
<p class="b9h-lang-en">{{ this.list.txtEN }}</p>
<p class="b9h-lang-it">{{ this.list.txtIT }}</p>
<span class="info">i</span>
</aside>
</section>
</section>
`,
props : {
list : Object
},
data () {
return {
isActive : false
}
},
computed: {
href: function () {
return "#" + this.list.id;
}
},
methods : {
donothing () {
},
toggleActive () {
this.isActive = !this.isActive
document.getElementById(this.list.id).scrollIntoView(
{
behavior: "smooth",
block: "end",
inline: "nearest"}
);
}
}
})
const jsonurl = "https://ed.brz9.dev/proj/map/asset/json/db.json"
/*
let jdnb
fetch(jsonurl)
.then(res => res.json())
.then(data => jdnb = data)
*/
let vm = new Vue({
el: '#root',
data: {
currentLang: 'fr',
fdata: {},
db : {},
db2 : {
restaurants : {
id : "resto",
type : "list",
nameFR : "Restaurant",
nameEN : "Restaurant",
nameIT : "Ristoranti",
sub : {
italiens : {
id: "restoital",
type : "list",
nameFR : "Italien",
nameEN : "Italian",
nameIT : "Italiano",
sub : {
SanTelmo : {
id: "santelmo",
type : "item",
name: "San Telmo",
img: "https://ed.brz9.dev/proj/map/asset/img/santelmo.jpg",
txtFR: "Français Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
txtEN: "English Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
txtIT: "Italiano Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
card : {
tabs : {
menu : {
priceRange : "18-32€",
dishes : {
divola : {
name : "Pizza Divola",
},
regina : {
name : "Pizza Regina",
}
}
},
time : {
monAM : "11h30-14h00",
monPM : "18h30-22h00",
}
}
}
},
Salsamenteria : {
id: "salsamenteria",
type : "item",
name: "Salsamenteria di Parma",
img: "https://ed.brz9.dev/proj/map/asset/img/salsamentiera.jpg",
txtFR: "Français Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
txtEN: "English Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
txtIT: "Italiano Adipisicing live-edge fam velit. Messenger bag poke laboris aesthetic viral do semiotics authentic est selfies.",
},
},
},
vege : {
id : "restovege",
type : "list",
nameFR : "Végétarien",
nameEN : "Vegan",
nameIT : "Vegetariano",
sub : {
SanTelmo : {
id: "santelmo",
type : "item",
name: "San Telmo",
},
Salsamenteria : {
id: "salsamenteria",
type : "item",
name: "Salsamenteria di Parma",
},
}
}
}
}
}
},
methods: {
hidelang: function(lang) {
langClass = "b9h-lang-" + lang;
langElms = document.getElementsByClassName(langClass);
for (i = 0; i < langElms.length; i++) {
langElms[i].style.display = 'none';
}
},
hidelangs: function() {
this.hidelang('fr');
this.hidelang('en');
this.hidelang('it');
},
showlang: function(lang) {
this.hidelangs();
langClass = "b9h-lang-" + lang;
langElms = document.getElementsByClassName(langClass);
for (i = 0; i < langElms.length; i++) {
langElms[i].style.display = 'revert';
}
},
async getJDB(){
const res = await fetch(dburl);
const data = await res.json();
this.db = data;
},
setlang: function (lang) {
target = document.querySelector("#"+"tab-"+lang);
marker = document.querySelector("#lang-marker");
marker.style.left = target.offsetLeft + "px";
marker.style.width = target.offsetWidth + "px";
this.showlang(lang);
},
},
created: function(){
console.log("about to call getJDB")
// this.getJDB();
fetch(dburl)
.then(res => res.json())
.then(data => this.db = data)
.catch(err => console.log(err.message))
console.log("after getJDB call")
this.setlang('fr');
},
mounted: function() {
console.log("mounting");
this.setlang('fr');
console.log("mounted");
this.setlang('fr');
},
updated: function() {
this.setlang('fr');
}
})