2024-07-15 16:34:28 +02:00
|
|
|
import { createApp } from 'vue'
|
2024-07-23 00:01:44 +02:00
|
|
|
import { createPinia } from 'pinia'
|
2024-07-15 16:34:28 +02:00
|
|
|
import '../scss/main.scss'
|
2024-07-31 00:33:21 +02:00
|
|
|
import Modale from './vuejs/Modale.vue'
|
2024-07-15 16:34:28 +02:00
|
|
|
|
2024-07-31 00:33:21 +02:00
|
|
|
import { useContentStore } from './stores/content';
|
2024-08-05 21:08:09 +02:00
|
|
|
import router from './router/router';
|
2024-07-15 16:34:28 +02:00
|
|
|
|
2024-07-23 00:01:44 +02:00
|
|
|
// Working with the history API
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API
|
2024-07-10 16:16:51 +02:00
|
|
|
|
2024-07-16 17:01:09 +02:00
|
|
|
// /**
|
|
|
|
// * @file
|
|
|
|
// * reha behaviors.
|
|
|
|
// * https://www.drupal.org/docs/drupal-apis/javascript-api/javascript-api-overview
|
|
|
|
// */
|
|
|
|
// (function (Drupal) {
|
2024-07-10 16:16:51 +02:00
|
|
|
|
2024-07-16 17:01:09 +02:00
|
|
|
// 'use strict';
|
|
|
|
|
|
|
|
// Drupal.behaviors.reha = {
|
|
|
|
// attach: function (context, settings) {
|
|
|
|
// console.log('It works!');
|
|
|
|
// }
|
|
|
|
// };
|
|
|
|
|
|
|
|
// } (Drupal));
|
|
|
|
|
|
|
|
(function (Drupal, drupalSettings) {
|
|
|
|
const CaravaneTheme = function () {
|
|
|
|
const _is_front = drupalSettings.path.isFront
|
|
|
|
console.log('drupalSettings', drupalSettings)
|
|
|
|
|
|
|
|
// let _I18n
|
|
|
|
|
|
|
|
// ___ _ _
|
|
|
|
// |_ _|_ _ (_) |_
|
|
|
|
// | || ' \| | _|
|
|
|
|
// |___|_||_|_|\__|
|
|
|
|
function init () {
|
|
|
|
console.log('CaravaneTheme init()')
|
|
|
|
initVues()
|
2024-07-29 23:39:35 +02:00
|
|
|
toggleMenu()
|
2024-07-16 17:01:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function initVues(){
|
2024-07-31 00:33:21 +02:00
|
|
|
initVueContentModale();
|
2024-07-16 17:01:09 +02:00
|
|
|
}
|
|
|
|
|
2024-07-31 00:33:21 +02:00
|
|
|
function initVueContentModale(){
|
2024-08-05 21:08:09 +02:00
|
|
|
const app = createApp(Modale).use(createPinia()).use(router);
|
2024-07-31 00:33:21 +02:00
|
|
|
const store = useContentStore();
|
|
|
|
app.mount('#content-modale');
|
2024-07-10 16:16:51 +02:00
|
|
|
|
2024-07-23 00:01:44 +02:00
|
|
|
processEtapeLinks(store);
|
2024-07-31 00:33:21 +02:00
|
|
|
processStaticLinks(store)
|
2024-07-10 16:16:51 +02:00
|
|
|
}
|
|
|
|
|
2024-07-16 17:01:09 +02:00
|
|
|
|
2024-07-31 00:33:21 +02:00
|
|
|
function onClickContentLink(e, store, category){
|
2024-07-16 17:01:09 +02:00
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
let a = e.currentTarget;
|
|
|
|
let nid = a.dataset.nodeNid;
|
2024-07-31 02:13:40 +02:00
|
|
|
// console.log(nid);
|
2024-07-16 17:01:09 +02:00
|
|
|
|
2024-07-31 02:13:40 +02:00
|
|
|
let general_link_fields = document.querySelectorAll('#menu > ul > li > a');
|
|
|
|
for (let field of general_link_fields) {
|
|
|
|
if (field.classList.contains('is-active')) {
|
|
|
|
field.classList.remove('is-active');
|
|
|
|
}
|
|
|
|
}
|
2024-07-31 00:33:21 +02:00
|
|
|
if (category === 'etape') {
|
|
|
|
store.fetchEtapeData(nid);
|
|
|
|
} else if (category === 'static') {
|
2024-07-31 02:13:40 +02:00
|
|
|
e.currentTarget.classList.add('is-active');
|
2024-07-31 00:33:21 +02:00
|
|
|
store.fetchStaticData(nid);
|
|
|
|
}
|
2024-07-16 17:01:09 +02:00
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2024-07-31 00:33:21 +02:00
|
|
|
function processStaticLinks(store){
|
2024-07-31 02:13:40 +02:00
|
|
|
let general_link_fields = document.querySelectorAll('#menu > ul > li:not(:first-of-type) > a');
|
2024-07-31 00:33:21 +02:00
|
|
|
for (let field of general_link_fields) {
|
|
|
|
let general_link_href = field.getAttribute('href');
|
|
|
|
const nid = general_link_href.charAt(general_link_href.length-1);
|
|
|
|
field.setAttribute('data-node-nid', nid);
|
|
|
|
field.addEventListener('click', (e) => onClickContentLink(e, store, 'static'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-16 17:01:09 +02:00
|
|
|
|
2024-07-23 00:01:44 +02:00
|
|
|
function processEtapeLinks(store){
|
2024-07-16 17:01:09 +02:00
|
|
|
let etape_link_fields = document.querySelectorAll('#etapes-liste div.views-field-title');
|
2024-07-23 00:01:44 +02:00
|
|
|
etape_link_fields.forEach((field) => {
|
2024-07-16 17:01:09 +02:00
|
|
|
let nid = null;
|
|
|
|
let classList = field.classList;
|
|
|
|
classList.forEach((classe) => {
|
|
|
|
let reg = /data-node-(\d+)/;
|
|
|
|
let result = classe.match(reg);
|
|
|
|
if (result) {
|
|
|
|
nid = result[1];
|
|
|
|
console.log(nid);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
if (nid) {
|
|
|
|
let a = field.querySelector('a');
|
|
|
|
a.setAttribute('data-node-nid', nid);
|
2024-07-31 00:33:21 +02:00
|
|
|
a.addEventListener('click', (e) => onClickContentLink(e, store, 'etape'));
|
2024-07-16 17:01:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-07-29 23:39:35 +02:00
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function toggleMenu() {
|
|
|
|
const menuButton = document.querySelector('#block-caravane-mainnavigation > #menu');
|
|
|
|
const menuContainer = document.querySelector('#block-caravane-mainnavigation > #menu > ul');
|
|
|
|
const menuTitle = document.querySelector('#menu-title');
|
|
|
|
const menuBurger = document.querySelector('#hamburger');
|
|
|
|
const menuH2 = document.querySelector('#menu > h2');
|
2024-07-31 02:13:40 +02:00
|
|
|
menuButton.addEventListener('click', (e) => {
|
2024-07-29 23:39:35 +02:00
|
|
|
// e.preventDefault();
|
2024-07-31 02:13:40 +02:00
|
|
|
setTimeout(() => {
|
|
|
|
menuContainer.classList.toggle('open');
|
|
|
|
menuTitle.classList.toggle('open');
|
|
|
|
menuBurger.classList.toggle('open');
|
|
|
|
menuH2.classList.toggle('open');
|
|
|
|
}, 50);
|
|
|
|
})
|
|
|
|
document.addEventListener('click', (e) => {
|
|
|
|
if (!menuContainer.contains(e.target) && !menuBurger.contains(e.target)) {
|
|
|
|
menuContainer.classList.remove('open');
|
|
|
|
menuTitle.classList.remove('open');
|
|
|
|
menuBurger.classList.remove('open');
|
|
|
|
menuH2.classList.remove('open');
|
|
|
|
}
|
2024-07-16 17:01:09 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
init()
|
|
|
|
} // end CaravaneTheme()
|
|
|
|
|
|
|
|
CaravaneTheme()
|
|
|
|
})(Drupal, drupalSettings)
|