(function () {
'use strict';
/* eslint func-names: off, eqeqeq: off, camelcase: off, no-self-assign: off, unicorn/prefer-number-properties: off, unicorn/prevent-abbreviations: off, no-eq-null: off, max-depth: off, complexity: off, max-params: off, unicorn/prefer-query-selector: off, no-negated-condition: off, prefer-rest-params: off */
// Classes JS definies dans ce fichier :
// . Select : Script convertissant un selecteur presents dans l'entete en composant JavaScript
// . convertion de la liste des sites "other websites" en select JS pour le mode reduit
// . affichage accordeon du pied de page en mode reduit
// . gestion de l'affichage sur les menus lateraux (effet parallaxe + mode accordeon)
/* ============================================================================================================================================================================ */
/* === CONVERTION DES SELECTEURS STATIQUES EN VERSION DYNAMIQUE =============================================================================================================== */
/* ============================================================================================================================================================================ */
const Data$4 = {
convertlist: [],
reference: {}
};
// - VALIDATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VALIDATION : controle de l'objet de donnees passe en parametre
function check$4(d) {
if (typeof d === 'object') {
if (d != null) {
return d.tagName != null;
}
return false;
}
return false;
}
// VALIDATION : convertion du text
function clean(t) {
return typeof t === 'string' ? t.replace(/&/g, '&').replace(/ /g, ' ').replace(/'/g, "'") : t;
}
// - CONVERTION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Fonction initiale convertissant un selecteur en version JS
function askconvertion(tag, parameters) {
let result = {
converted: false,
data: null
};
if (typeof tag === 'string') tag = document.getElementById(tag);
if (check$4(tag)) {
if (!tag.dataset.selectconverted) {
if (tag.tagName.toLowerCase() == 'select') {
// Traitement des selecteurs classiques
tag.parentNode.insertBefore(m, tag);
tag.remove();
// Envoi de la convertion
result = convert$3(s, parameters);
}
}
}
return result;
}
// Appel de la fonction "callback" apres la convertion du selecteur si demandee
let b = false;
if (parameters != null && typeof parameters === 'object' && typeof parameters.cb_afterconvert === 'function') b = true;
if (b) parameters.cb_afterconvert(result.converted, result.data);
// Envoi du resultat de la demande
return result;
}
function alwaysTrue() {
return true;
}
function convert$3(tag, parameters) {
// Definition des arguments
// > tag // [NODE] (mandatory) : Reference de la balise presents dans l'entete en composant JavaScript
// . convertion de la liste des sites "other websites" en select JS pour le mode reduit
// . affichage accordeon du pied de page en mode reduit
// . gestion de l'affichage sur les menus lateraux (effet parallaxe + mode accordeon)
/* ============================================================================================================================================================================ */
/* === GESTION DES ACTIONS ACCORDEONS (expand/collapse [+]/[-]) =============================================================================================================== */
/* ============================================================================================================================================================================ */
const Data$3 = {
convertlist: [],
reference: {}
};
// - VALIDATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VALIDATION : controle de l'objet de donnees passe en parametre
function check$3(d) {
if (typeof d === 'object') {
if (d != null) {
return d.tagName != null;
}
return false;
}
return false;
}
// - CONVERTION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function convert$2(parent, newbutton, animatedcontent, realcontent, parameters) {
// Initialisation des variables
let i;
let m;
let t;
let b;
let data = null;
// Verification des balise transmises en parametre
if (check$3(parent) && check$3(newbutton) && check$3(animatedcontent) && check$3(realcontent) && !parent.dataset.accordion) {
// Blocage des convertions ulterieures
parent.dataset.accordion = false;
// Analyse de l'objet de parametre
if (typeof parameters !== 'object') {
parameters = {};
} else if (parameters == null) {
parameters = {};
}
// Definition de l'objet
// > params.clickonicon // [BOOLEAN] (default value: false) : Indicateur d'ajout des actions de souris sur l'icone et non l'entierete du bouton
// > params.openbtn // [NODE] : Conteneur du bouton d'ouverture [+] d'origine (utilise sans JS) a supprimer dans la version JS
// > params.closebtn // [NODE] : Conteneur du bouton de fermeture [-] d'origine (utilise sans JS) a supprimer dans la version JS
// > params.cb_afterconvert // [FUNCTION] (need a return value = true) : Fonction appelee apres la convertion du bloc
// > params.cb_beforeanim // [FUNCTION] (need a return value = true) : Fonction appelee avant l'animation d'ouverture ou la fermeture du bloc de contenu
// > params.cb_afteranim // [FUNCTION] (need a return value = true) : Fonction appelee apres l'animation d'ouverture ou la fermeture du bloc de contenu
// Initialisation de l'objet de donnees du widget
data = {};
data.id = null; // [STRING] : Identifiant de la balise originale
data.reference = null; // [STRING] : Identifiant de la balise convertie
data.index = null; // [INT] : Identifiant du widget dans le listing
data.parent = parent; // [NODE] : Conteneur global du bouton et du contenu
data.button = newbutton; // [NODE] : Bouton gerant l'ouverture et la fermeture du contenu
data.buttoninside = false; // [BOOLEAN] : Indicateur si le bouton est ou non un enfant du conteneur a animer
data.iconbutton = null; // [NODE] : Icone flottante/independante utilisee pour le clic
data.content = realcontent; // [NODE] : Contenu a afficher/masquer
data.container = animatedcontent; // [NODE] : Conteneur a animer lors de l'ouverture et la fermeture
data.focus = null; // [NODE] : Balise devant receptionner le focus clavier lors de l'ouverture
data.clickonicon = false; // [BOOLEAN] : Indicateur d'ajout des actions de souris sur l'icone et non l'entierete du bouton
data.dependencies = []; // [ARRAY] : Liste des index des panneaux a fermer lorsque le panneau s'ouvre
data.indexdependency = null; // [NUMBER] : Position du conteneur accordeon au sein des dependances
data.callback = {};
data.callback.beforeanim = null; // [FUNCTION] : Fonction a appeler avant l'animation de changement de l'affichage
data.callback.afteranim = null; // [FUNCTION] : Fonction a appeler apres l'animation de changement de l'affichage
// Sauvegarde des donnees passees par parametre
data.clickonicon = Boolean(parameters.clickonicon);
data.callback.beforeanim = typeof parameters.cb_beforeanim === 'function' ? parameters.cb_beforeanim : function () {
return true;
};
data.callback.afteranim = typeof parameters.cb_afteranim === 'function' ? parameters.cb_afteranim : function () {
return true;
};
// Identification du conteneur
if (String(parent.id).length > 0) {
data.id = parent.id;
} else {
i = new Date();
data.id = String('aID-' + i.getTime() + '_' + Math.random()).replace('.', '-');
}
data.reference = 'accordionid_' + data.id;
// Parametrage des donnees et attributs JS
data.parent.dataset.expanded = false;
// Suppression des liens superflus (liens d'ouverture/fermeture utilises dans la version statique sans JS)
if (check$3(parameters.openbtn)) parameters.openbtn.remove();
if (check$3(parameters.closebtn)) parameters.closebtn.remove();
// Creation de la balise "icone" [+]/[-]
if (data.clickonicon) {
b = document.createElement('span');
b.classList.add('epjs_accordionbutton');
data.iconbutton = document.createElement('span');
data.iconbutton.append(document.createTextNode(' '));
data.iconbutton.classList.add('epjs_accordionicon');
b.append(data.iconbutton);
data.button.append(b);
}
// Identification de la position du bouton par rapport au conteneur d'animation
t = data.container.querySelectorAll('*');
m = t.length;
for (i = 0; i < m; i++) {
if (t[i] == data.button) {
data.buttoninside = true;
break;
}
}
// Recherche de la premiere balise devant receptionner le focus
t = data.content.querySelectorAll('*');
m = t.length;
for (i = 0; i < m; i++) {
if (t[i].getAttribute('tabindex') && t[i].getAttribute('tabindex') != '-1' || t[i].tagName.toLowerCase() == 'a' || t[i].tagName.toLowerCase() == 'input' || t[i].tagName.toLowerCase() == 'button' || t[i].tagName.toLowerCase() == 'textarea') {
data.focus = t[i];
break;
}
}
// Traitement des elements interactifs du menu
t = data.content.querySelectorAll('*');
m = t.length;
for (i = 0; i < m; i++) {
if (t[i].getAttribute('tabindex') && t[i].getAttribute('tabindex') != '-1' || t[i].tagName.toLowerCase() == 'a' || t[i].tagName.toLowerCase() == 'input' || t[i].tagName.toLowerCase() == 'button' || t[i].tagName.toLowerCase() == 'textarea') {
t[i].addEventListener('keyup', function (e) {
keyboard(e, i);
}, false);
}
}
// Sauvegarde des donnees dans la classe
Data$3.convertlist.push(data);
Data$3.reference[data.reference] = Data$3.convertlist.length - 1;
data.index = Data$3.convertlist.length - 1;
i = data.index;
// Deplacement des actions d'ouverture/fermeture sur le nouveau bouton
data.container.addEventListener('transitionend', function (e) {
endanim(e, i);
}, false);
data.button.addEventListener('keydown', function (e) {
keyboard(e, i);
}, false);
if (data.clickonicon) data.iconbutton.addEventListener('click', function (e) {
click(e, i);
}, false);else data.button.addEventListener('click', function (e) {
click(e, i);
}, false);
// Activation de l'etat
state(data, null, true);
}
// Appel de la fonction "callback" apres la convertion du selecteur si demandee
b = false;
if (parameters != null && typeof parameters === 'object' && typeof parameters.cb_afterconvert === 'function') b = true;
if (b) parameters.cb_afterconvert(data != null, data);else return {
converted: data != null,
data
};
}
// Ajout des liaisons entre les panneaux (fermeture des panneaux lorsque le panneau cible est ouvert)
function setdependency(index, dependencies) {
const data = Data$3.convertlist[index];
if (data != null && dependencies.length > 0) {
let i;
const {
length
} = dependencies;
for (i = 0; i < length; i++) {
if (dependencies[i] != index) data.dependencies.push(dependencies[i]);else data.indexdependency = data.dependencies.length - 1;
}
return {
executed: true,
data
};
}
return {
executed: false,
data: null
};
}
// - GESTION DES ETATS DU WIDGET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ETAT DU WIDGET : Appel public pour le changement d'etat
function activate(reference) {
if (isNaN(reference)) {
state(reference, null, true);
} else {
state(null, reference, true);
}
}
function desactivate(reference) {
if (isNaN(reference)) {
state(reference, null, false);
} else {
state(null, reference, false);
}
}
// ETAT DU WIDGET : Activation et desactivation des fonctionnalites
function state(data, index, active) {
// Identification de l'objet de donnees
if (data == null) data = Data$3.convertlist[index];
if (data == null) return;
// Verification du traitement prealable du widget
if (active) {
if (data.parent.dataset.accordion != 'true') {
delete data.parent.dataset.noanim;
data.parent.dataset.accordion = true;
data.parent.dataset.expanded = false;
data.button.setAttribute('aria-selected', false);
data.button.setAttribute('aria-expanded', false);
data.button.setAttribute('aria-controls', data.content.id);
data.button.setAttribute('role', 'tab');
data.content.setAttribute('aria-hidden', true);
data.container.setAttribute('role', 'tablist');
data.container.setAttribute('multiselectable', true);
data.container.style.height = '';
data.content.style.display = '';
data.content.style.opacity = '';
if (data.dependencies.length > 0) {
data.button.setAttribute('tabindex', data.indexdependency == -1 ? 0 : -1);
} else {
data.button.setAttribute('tabindex', 0);
}
}
} else {
if (data.parent.dataset.accordion) {
data.parent.dataset.accordion = false;
data.parent.dataset.expanded = false;
}
delete data.parent.dataset.noanim;
data.button.removeAttribute('aria-selected');
data.button.removeAttribute('aria-expanded');
data.button.removeAttribute('aria-controls');
data.button.removeAttribute('role');
data.button.removeAttribute('tabindex');
data.content.removeAttribute('aria-hidden');
data.container.removeAttribute('role');
data.container.removeAttribute('multiselectable');
data.container.style.height = '';
data.content.style.display = '';
data.content.style.opacity = '';
}
}
// - GESTION DES ACTIONS SUR LES ELEMENTS DU MENU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ACTION : Demande d'ouverture ou de fermeture via le clic "souris" sur le bouton
function click(_e, index) {
// Identification de l'objet de donnees
const data = Data$3.convertlist[index];
if (data != null) change(data, null, false, true);
}
// ACTION : Demande d'ouverture ou de fermeture via la navigation clavier
function keyboard(e, index) {
let b;
// Identification de l'objet de donnees
const data = Data$3.convertlist[index];
if (data != null) {
// Verification de la touche choisie
let k = null;
if (e.keyCode) k = e.keyCode;else if (e) k = e.which ? e.which : 0;
// Identification de l'objet de l'appel
if (e.target == data.button && data.dependencies.length > 0 && data.indexdependency != null) {
// Titre d'un panneau
if (k == 104 || k == 38 || k == 37 || k == 100) {
// - - - - - - - - - - - - - - - - - - - - - - - - -> deplacement de la selection (touche "8" ou "arrow up" ou "arrow left" ou "4")
if (data.indexdependency >= 0) {
Data$3.convertlist[data.dependencies[data.indexdependency]].button.focus();
}
b = false;
} else if (k == 98 || k == 40 || k == 39 || k == 102) {
// - - - - - - - - - - - - - - - - - - - - -> deplacement de la selection (touche "2" ou "arrow bottom" ou "arrow right" ou "6")
if (data.indexdependency < data.dependencies.length - 1) {
Data$3.convertlist[data.dependencies[data.indexdependency + 1]].button.focus();
}
b = false;
} else if (k == 13 || k == 32) {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> ouverture/fermeture du menu (touche "enter" ou "space"){
change(data, null, null, true);
b = false;
} else if (k == 36 || k == 35) {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> deplacement de la selection au debut ou la fin du menu (touche "home" ou "end"){
if (data.indexdependency < 0 && k == 36 || data.indexdependency > data.dependencies.length - 2 && k == 35) {
data.button.focus();
} else {
Data$3.convertlist[data.dependencies[k == 36 ? 0 : data.dependencies.length - 1]].button.focus();
}
b = false;
} else b = true;
} else if (e.ctrlKey && (k == 38 || k == 37)) {
// Element interactif de l'accordeon
data.button.focus();
b = false;
} else b = true;
} else b = true;
// Autorisation de la suite d'evenement
if (b) {
return true;
}
e.preventDefault();
return false;
}
// ACTION : Demande specifique d'ouverture
function open(index, noaction, dependencies, noanim) {
const data = Data$3.convertlist[index];
if (data != null) change(data, true, noaction, dependencies === true, false, noanim);
}
// ACTION : Demande specifique de fermeture
function close(index, noaction, dependencies, noanim) {
const data = Data$3.convertlist[index];
if (data != null) change(data, false, noaction, dependencies === true, false, noanim);
}
// - GESTION DE L'OUVERTURE ET FERMETURE DE PANNEAUX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// OUVERTURE/FERMETURE : Activation et desactivation des fonctionnalites
function change(data, view, noaction, dependencies, focus, noanim) {
// Recherche de l'etat a afficher
view = view === true || view === false ? view : !(data.parent.dataset.expanded === 'true');
// Verification du changement demande
if (data.parent.dataset.accordion == 'true' && String(view) != data.parent.dataset.expanded) {
// Recuperation de la hauteur reelle des liens
let h = calcul(data);
// Calcul de la nouvelle hauteur a definir pour l'anim via CSS
const i = data.buttoninside ? data.button.offsetHeight + 'px' : 0;
const t = !view ? i : h + 'px';
// Assignation de la hauteur actuelle
data.parent.dataset.noanim = true;
data.container.style.height = !view ? h + 'px' : i;
data.content.style.display = '';
// Autorisation d'affichage
data.parent.dataset.expanded = view;
data.button.setAttribute('aria-selected', view);
data.button.setAttribute('aria-expanded', view);
data.content.setAttribute('aria-hidden', !view);
// Lancement des fermetures des panneaux lies lors de l'ouverture
if (view && dependencies && data.dependencies.length > 0) {
h = data.dependencies.length - 1;
for (h = h; h >= 0; h--) {
close(data.dependencies[h], true, false);
}
}
// Gestion du focus sur le panneau et des panneaux associes
if (dependencies && data.dependencies.length > 0) {
// Assignation du focus sur le panneau appelant la fonction
data.button.setAttribute('tabindex', 0);
// Desactivation des panneaux lies (Skip focus for other footer's menu buttons) (Bug #ENG-34202)
// h = data.dependencies.length - 1;
// for (h = h; h >= 0; h--) {
// Data.convertlist[data.dependencies[h]].button.setAttribute('tabindex', '-1');
// }
} else if (data.dependencies.length === 0) {
// Activation du panneau independant
data.button.setAttribute('tabindex', 0);
}
// Autorisation de lancement des scripts callback en debut et fin d'animation
if (noaction) delete data.parent.dataset.callback;else data.parent.dataset.callback = true;
// Lancement de l'affichage anime
if (noanim === true) {
data.container.style.height = t;
} else if (noaction) setTimeout(function () {
delete data.parent.dataset.noanim;
data.container.style.height = t;
}, 10);else if (data.callback.beforeanim(null, data, view)) setTimeout(function () {
delete data.parent.dataset.noanim;
data.container.style.height = t;
}, 10);
}
}
// OUVERTURE/FERMETURE : Nettoyage des styles CSS apres animation
function endanim(e, index) {
// Identification de l'objet de donnees
const data = Data$3.convertlist[index];
if (data != null) {
const a = Boolean(data.parent.dataset.callback);
// Nettoyage des styles CSS de l'animation
data.container.style.height = '';
data.content.style.display = '';
data.content.style.opacity = '';
delete data.parent.dataset.callback;
delete data.parent.dataset.noanim;
// Lancement de l'appel "callback" si besoin
if (a) data.callback.afteranim(null, data, !(data.parent.dataset.expanded === 'true'));
}
}
// OUVERTURE/FERMETURE : Calcul de la hauteur du bloc de contenu pour l'animation
function calcul(data) {
let height;
data.parent.dataset.noanim = true;
data.container.style.height = data.buttoninside ? data.button.offsetHeight + 'px' : 0;
data.content.style.display = 'block';
data.content.style.opacity = '0';
height = data.content.offsetHeight;
if (data.buttoninside) height += data.button.offsetHeight;
data.container.style.height = '';
data.content.style.display = '';
data.content.style.opacity = '';
delete data.parent.dataset.noanim;
return height;
}
// - GESTION DES FONCTIONS PUBLIQUES - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const accordionHandler = {
// Fonction de convertion d'un conteneur en bloc "expand/collapse"
convert: convert$2,
// Parametres de la fonction : Accordion.convert(container, button, animatedcontent, realcontent, params)
// > container // [NODE] (mandatory) : Reference de la balise "conteneur global" comprenant le bouton et le contenu
// > button // [NODE] (mandatory) : Reference de la balise "bouton" gerant l'ouverture et la fermeture du contenu.
// > animatedcontent // [NODE] (mandatory) : Reference de la balise a animer lors de l'ouverture et la fermeture.
// > realcontent // [NODE] (mandatory) : Reference de la balise utilisee comme reference pour la hauteur du panneau ouvert (doit etre un enfant de "animatedcontent").
// > params // [OBJECT] (optional) : Objet de personnalisation du composant
// > params.clickonicon // [BOOLEAN] (default value: false) : Indicateur d'ajout des actions de souris sur l'icone et non l'entierete du bouton
// > params.openbtn // [NODE] : Conteneur du bouton d'ouverture [+] d'origine (utilise sans JS) a supprimer dans la version JS
// > params.closebtn // [NODE] : Conteneur du bouton de fermeture [-] d'origine (utilise sans JS) a supprimer dans la version JS
// > params.cb_afterconvert // [FUNCTION] (need a return value = true) : Fonction appelee apres la convertion du bloc
// > params.cb_beforeanim // [FUNCTION] (need a return value = true) : Fonction appelee avant l'animation d'ouverture ou la fermeture du bloc de contenu
// > params.cb_afteranim // [FUNCTION] (need a return value = true) : Fonction appelee apres l'animation d'ouverture ou la fermeture du bloc de contenu
//
// Reponse de la fonction : Accordion.convert() = result
// > result.converted // [BOOLEAN] : Defini si la fonctionnalite a pu etre ajoutee ou non
// > result.data // [OBJECT] : Objet de donnees contenant toutes les informations du composant converti (vaut "null" si la convertion a echoue)
// Fonction de liaison des autres composants "accordion" deja convertis a fermer lors de l'ouverture du composant principal
setdependency,
// Parametres de la fonction : Accordion.setdependency(reference, dependencies)
// > reference // [NUMBER] (mandatory) : Reference (numerique) du composant converti concerne
// > dependencies // [ARRAY] (mandatory) : Liste de references des composants (index "numerique") a associer lors de l'ouverture
// Reponse de la fonction : Accordion.setdependency() = result
// > result.executed // [BOOLEAN] : Defini si la demande a reussi ou non
// > result.data // [OBJECT] : Objet de donnees contenant toutes les informations du composant
// Fonction d'activation et de desactivation du composant apres convertion
activate,
// Parametres de la fonction : Accordion.activate(reference)
// > reference // [NUMBER] (mandatory) : Reference (numerique) du composant converti a activer
desactivate,
// Parametres de la fonction : Accordion.desactivate(reference)
// > reference // [NUMBER] (mandatory) : Reference (numerique) du composant converti a desactiver
// Fonction demandant l'ouverture et fermeture d'un composant "accordion"
open,
// Parametres de la fonction : Accordion.open(reference, no-action, depedency, no-anim)
// > reference // [NUMBER] (mandatory) : Reference (numerique) du composant converti a activer
// > no-action // [BOOLEAN] (default value: false) : Defini si les fonctions "callback" doivent etre exectuee lors de l'action
// > dependencies // [BOOLEAN] (default value: false) : Defini si l'action doit modifier l'etat des composants associes
// > no-anim // [BOOLEAN] (default value: false) : Defini si l'action doit etre animee ou non
// Fonction d'activation du composant apres convertion
close // Parametres de la fonction : Accordion.close(reference, no-action, depedency, no-anim)
// > reference // [NUMBER] (mandatory) : Reference (numerique) du composant converti a desactiver
// > no-action // [BOOLEAN] (default value: false) : Defini si les fonctions "callback" doivent etre exectuee lors de l'action
// > dependencies // [BOOLEAN] (default value: false) : Defini si l'action doit modifier l'etat des composants associes
// > no-anim // [BOOLEAN] (default value: false) : Defini si l'action doit etre animee ou non
};
/* eslint func-names: off, eqeqeq: off, camelcase: off, no-self-assign: off, unicorn/prefer-number-properties: off, unicorn/prevent-abbreviations: off, no-eq-null: off, max-depth: off, complexity: off, max-params: off, unicorn/prefer-query-selector: off, no-negated-condition: off, prefer-rest-params: off */
// JAVASCRIPT GERANT L'AFFICHAGE GENERIQUE DES PAGES DES SITES EUROPARL
// Copyright : European Parliament
// Classes JS definies dans ce fichier :
// . Select : Script convertissant un selecteur presents dans l'entete en composant JavaScript
// . convertion de la liste des sites "other websites" en select JS pour le mode reduit
// . affichage accordeon du pied de page en mode reduit
// . gestion de l'affichage sur les menus lateraux (effet parallaxe + mode accordeon)
/* ============================================================================================================================================================================ */
/* === GESTION DES ACTIONS DE SUIVI PARALLAXE ================================================================================================================================= */
/* ============================================================================================================================================================================ */
const Data$2 = {
convertlist: [],
reference: {},
toolbar: null
};
// - VALIDATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VALIDATION : controle de l'objet de donnees passe en parametre
function check$2(d) {
if (typeof d === 'object') {
if (d != null) {
return d.tagName != null;
}
return false;
}
return false;
}
// - CONVERTION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function convert$1(columntarget, contenttarget, parameters) {
// Initialisation des variables
let i;
let m;
let t;
let b;
let l;
let data = null;
// Recherche des balises utiles
const o = {};
o.parent = columntarget;
o.component = null;
if (check$2(o.parent)) {
if (!o.parent.dataset.following && o.parent.classList.contains('ep_gridcolumn')) {
// Analyse de la demande specifique d'une balise a suivre
if (check$2(contenttarget)) {
o.component = contenttarget;
} else {
// Recherche de la balise a animer
l = [];
b = null;
m = o.parent.childNodes.length - 1;
for (i = 0; i < m; i++) {
t = o.parent.childNodes[i];
if (check$2(t) && (t.classList.contains('ep_gridrow') || t.classList.contains('ep_gridcolumn-content'))) {
b = t;
break;
}
}
if (b != null) {
m = b.childNodes.length - 1;
for (i = 0; i < m; i++) {
if (check$2(b.childNodes[i])) l.push(b.childNodes[i]);
}
if (l.length == 1) o.component = l[0];else o.parent = null;
} else o.parent = null;
}
} else o.parent = null;
}
// Verification des balise transmises en parametre
if (check$2(o.parent) && check$2(o.component)) {
if (o.parent.classList.contains('ep_gridcolumn') && o.component != null) {
// Recherche de la barre d'outil utilisee en survol lors du parallaxe
if (Data$2.toolbar == null) {
t = document.querySelector('#website-header');
if (check$2(t)) {
t = t.querySelectorAll('.toolbar');
i = t.length - 1;
for (i = i; i >= 0; i--) {
if (t[i].classList.contains('toolbar_bottom')) {
Data$2.toolbar = t[i];
break;
}
}
}
}
// Initialisation de l'objet de donnees du widget
data = {};
data.index = null; // [INT] : Identifiant du widget dans le listing
data.reference = null; // [STRING] : Identifiant de la balise convertie
data.column = o.parent; // [NODE] : Reference de la balise "colonne" contenant les elements a animer
data.component = o.component; // [NODE] : Balise principale a animer
// Sauvegarde des donnees dans la classe
Data$2.convertlist.push(data);
data.index = Data$2.convertlist.length - 1;
data.reference = 'followingscrollid_' + data.index;
Data$2.reference[data.reference] = data.index;
data.column.dataset.following = data.index;
// Ajout des evenements de mises a jour
if (Data$2.convertlist.length < 2 && Data$2.toolbar != null) {
document.addEventListener('scroll', function (e) {
update();
}, false);
window.addEventListener('resize', function (e) {
update();
}, false);
}
} else data = null;
} else data = null;
// Appel de la fonction "callback" apres la convertion du selecteur si demandee
b = false;
if (parameters != null && typeof parameters === 'object' && typeof parameters.cb_afterconvert === 'function') b = true;
if (b) parameters.cb_afterconvert(data != null, data);else return {
converted: data != null,
data
};
}
// - GESTION DE L'ACTION DE SUIVI DU SCROLL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// AFFICHAGE : Mise a jour de l'affichage du composant
function refresh$2(index, call_by_scroll) {
// Calcul de la hauteur du scroll
const s = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
// Verification de la demande : tout mettre a jour ou juste un specifique ?
if (!isNaN(index) && index >= 0 && index < Data$2.convertlist.length) {
parallax(s, Data$2.convertlist[index], call_by_scroll);
} else {
let i = Data$2.convertlist.length - 1;
for (i = i; i >= 0; i--) {
parallax(s, Data$2.convertlist[i], call_by_scroll);
}
}
}
function askrefresh(index) {
if (arguments.length == 1 || arguments.length == 2 && typeof arguments[0] === 'object') {
refresh$2(arguments[1], false);
} else {
refresh$2(index, false);
}
}
// AFFICHAGE : Repositionnement du composant selon le scroll de la page
function parallax(scrollposition, data, delay) {
let y = 0;
const height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
let morey = 0;
const limit = {
height: 0,
y: 0
};
const target = {
height: 0,
y: 0
};
// Calcul de la hauteur du composant et de la zone visible
target.y = data.component.offsetTop;
target.height = data.component.offsetHeight;
limit.y = data.column.offsetTop;
limit.height = data.column.offsetHeight;
// Correction du scroll (prise en compte de la hauteur de la barre d'outil parallaxe)
if (document.body.dataset.headerparallax) {
morey = Data$2.toolbar.offsetHeight;
}
// Analyse de la hauteur du composant
if (target.height < limit.height) {
if (target.height > height) {
// Calcul de la position a assigner au composant
if (target.y + target.height > scrollposition + height) {
y = 0;
} else if (scrollposition + height < limit.y + limit.height) {
y = Math.max(0, scrollposition + height - (target.y + target.height));
} else {
y = Math.max(0, limit.height - target.height);
}
} else {
// Calcul de la position a assigner au composant
y = Math.max(0, Math.min(limit.height - target.height, scrollposition + morey - limit.y + 60));
}
} else {
y = 0;
}
// Definition du delais d'animation (si la fonction est bien appelee par les evenements de scroll)
data.component.style.transitionDelay = delay ? '' : '0s';
// Assignation du la nouvelle coordonnee
data.component.style.transform = 'translate(0, ' + y + 'px)';
data.component.style.webkitTransform = 'translate(0, ' + y + 'px)';
}
// Appel de l'action par la fonction elle-meme
function update(_e) {
refresh$2(-1, true);
}
// - GESTION DES FONCTIONS PUBLIQUES - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const FollowingScroll = {
// Fonction d'ajout de la fonctionnalite de suivi du scroll a un composant HTML selon les limites de la colonne
convert: convert$1,
// Parametres de la fonction : FollowingScroll.convert(container, reference, params)
// > container // [NODE] (mandatory) : Reference de la balise "colonne" contenant le bloc a manipuler
// > reference // [NODE] (mandatory) : Reference de la balise a manipuler
// > params // [OBJECT] (optional) : Objet de personnalisation du composant
// > params.cb_afterconvert // [FUNCTION] (need a return value = true) : Fonction appelee apres la convertion du bloc
//
// Reponse de la fonction : FollowingScroll.convert() = result
// > result.converted // [BOOLEAN] : Defini si la fonctionnalite a pu etre ajoutee ou non
// > result.data // [OBJECT] : Objet de donnees contenant toutes les informations du composant converti (vaut "null" si la convertion a echoue)
// Fonction de mise a jour de la position du composant
refresh: askrefresh // Parametres de la fonction : FollowingScroll.refresh(reference)
// > reference // [NUMBER] (optional) : Reference du composant a manipuler (si non mentionne, tous les composants convertis seront mise a jour)
};
/* eslint func-names: off, eqeqeq: off, camelcase: off, no-self-assign: off, unicorn/prefer-number-properties: off, unicorn/prevent-abbreviations: off, no-eq-null: off, max-depth: off, complexity: off, max-params: off, unicorn/prefer-query-selector: off, no-negated-condition: off, prefer-rest-params: off */
const Data$1 = {
convertlist: [],
reference: {},
toolbar: null
};
// - VALIDATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VALIDATION : controle de l'objet de donnees passe en parametre
function check$1(d) {
if (typeof d === 'object') {
if (d != null) {
return d.tagName != null;
}
return false;
}
return false;
}
// - CONVERTION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function convert(target, parameters) {
// Initialisation des variables
let i;
let t;
let b;
let f;
let r;
let data = null;
// Recherche des balises utiles
const o = {};
o.parent = target;
o.menu = null;
o.sections = [];
if (check$1(o.parent)) {
if (!o.parent.dataset.tableofcontent) {
// Recherche de la balise parent
t = o.parent.querySelectorAll('.ep_tableofcontent-menu');
if (t.length > 0) o.menu = t[0];
} else {
o.parent = null;
}
}
// Verification des balise transmises en parametre
if (check$1(o.parent) && check$1(o.menu)) {
// Definition de la recherche des balises pour l'affichage en accordeon
f = function (f_tagparent) {
let f_t;
let f_i;
// Initialisation de l'objet de donnees
const f_d = {
parent: f_tagparent,
title: null,
ticon: null,
open: null,
close: null,
content: null,
list: null
};
// Recherche des liens d'ouverture/fermeture sans JS
f_t = f_d.parent.querySelectorAll('.ep_menu-access');
f_i = f_t.length - 1;
for (f_i = f_i; f_i >= 0; f_i--) {
if (f_t[f_i].classList.contains('ep_openaccess')) f_d.open = f_t[f_i];else if (f_t[f_i].classList.contains('ep_closeaccess')) f_d.close = f_t[f_i];
if (f_d.open != null && f_d.close != null) break;
}
// Recherche du titre du bloc pour la convertion en lien d'ouverture/fermeture via JS
f_t = f_d.parent.querySelectorAll('.ep_title');
if (f_t.length > 0) {
f_d.title = f_t[0];
}
// Recherche du bloc de contenu a deployer
f_t = f_d.parent.querySelectorAll('.ep_list');
if (f_t.length > 0) {
f_d.content = f_t[0];
f_t = f_d.content.querySelectorAll('ul');
if (f_t.length > 0) {
f_d.list = f_t[0];
}
}
// Envoi du resultat
return check$1(f_d.parent) && check$1(f_d.title) && check$1(f_d.open) && check$1(f_d.close) && check$1(f_d.content) && check$1(f_d.list) ? f_d : null;
};
// Recherche des sections du menu a convertir en accordeon
t = o.menu.querySelectorAll('.ep_content');
i = t.length - 1;
for (i = i; i >= 0; i--) {
r = f(t[i]);
if (r != null) o.sections.push(r);
}
// Verification des donnees obtenues
if (o.parent.classList.contains('ep_gridcolumn') && o.menu != null) {
// Initialisation de l'objet de donnees du widget
data = {};
data.index = null; // [INT] : Identifiant du widget dans le listing
data.reference = null; // [STRING] : Identifiant de la balise convertie
data.column = o.parent; // [NODE] : Reference de la balise [colonne] parente au menu
data.menu = o.menu; // [NODE] : Balise principale du menu
data.items = []; // [ARRAY] : Liste des references des sections [+]/[-]
// Sauvegarde des donnees dans la classe
Data$1.convertlist.push(data);
data.index = Data$1.convertlist.length - 1;
data.reference = 'tableofcontentid_' + data.index;
Data$1.reference[data.reference] = data.index;
data.column.dataset.tableofcontent = data.index;
data.column.classList.remove('ep-layout_followingscroll');
// Autorisation de l'affichage visuel
data.menu.dataset.converted = true;
// Traitement du suivi du menu
t = FollowingScroll.convert(o.parent, o.menu, null);
if (t.converted) data.follow = t.data.index;
// Convertion de la liste des elements en mode accordeon [+]/[-]
if (o.sections.length > 0) {
r = null;
i = o.sections.length - 1;
i = o.sections.length - 1;
for (i = i; i >= 0; i--) {
t = accordionHandler.convert(o.sections[i].parent,
// Reference du conteneur global
o.sections[i].title,
// Reference du nouveau bouton d'ouverture [+]/[-] (conteneur global)
o.sections[i].content,
// Reference du conteneur a animer
o.sections[i].list,
// Reference de la liste generale des liens
{
openbtn: o.sections[i].open,
// Reference de la balise du bouton d'ouverture d'origine a supprimer
closebtn: o.sections[i].close,
// Reference de la balise du bouton de fermeture d'origine a supprimer
cb_afteranim(_e) {
refresh$1(data.follow);
} // Fonction a appeler lors de la fin de l'animation d'ouverture/fermeture
});
if (t.converted) {
data.items.push(t.data.index);
if (o.sections[i].parent.dataset.selected == 'true') r = t.data.index;
}
}
}
// Ajout des dependances entre les sections
i = data.items.length;
for (i = i; i >= 0; i--) {
accordionHandler.setdependency(data.items[i], data.items);
}
// Ouverture du menu selectionne lors de l'initialisation de la page
if (r != null) accordionHandler.open(r, true, true, true);
} else data = null;
}
// Appel de la fonction "callback" apres la convertion du selecteur si demandee
b = false;
if (parameters != null && typeof parameters === 'object' && typeof parameters.cb_afterconvert === 'function') b = true;
if (b) parameters.cb_afterconvert(data != null, data);else return {
converted: data != null,
data
};
}
// - GESTION DE L'OUVERTURE ET FERMETURE DE PANNEAUX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// AFFICHAGE : Mise a jour de l'affichage du menu
function refresh$1(index) {
index = arguments.length[2] && typeof arguments[1] === 'object' ? arguments[2] : arguments[1];
if (!isNaN(index) && index >= 0 && index < Data$1.convertlist.length) {
FollowingScroll.refresh(Data$1.convertlist[index]);
} else {
let i = Data$1.convertlist.length - 1;
for (i = i; i >= 0; i--) {
FollowingScroll.refresh(Data$1.convertlist[i]);
}
}
}
// - GESTION DES FONCTIONS PUBLIQUES - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const TableOfContent = {
// Fonction ajoutant les fonctionnalites au menu "Table of Content"
convert,
// Parametres de la fonction : TableOfContent.convert(reference, params)
// > reference // [NODE] (mandatory) : Reference de la balise "menu"
// > params // [OBJECT] (optional) : Objet de personnalisation du composant
// > params.cb_afterconvert // [FUNCTION] (need a return value = true) : Fonction appelee apres la convertion du bloc
//
// Reponse de la fonction : TableOfContent.convert() = result
// > result.converted // [BOOLEAN] : Defini si la fonctionnalite a pu etre ajoutee ou non
// > result.data // [OBJECT] : Objet de donnees contenant toutes les informations du composant converti (vaut "null" si la convertion a echoue)
// Fonction de mise a jour de la position (scroll) du composant
refresh: refresh$1 // Parametres de la fonction : TableOfContent.refresh(reference)
// > reference // [NUMBER] (optional) : Reference du composant a manipuler (si non mentionne, tous les composants convertis seront mise a jour)
};
/* eslint func-names: off, eqeqeq: off, camelcase: off, no-self-assign: off, unicorn/prefer-number-properties: off, unicorn/prevent-abbreviations: off, no-eq-null: off, max-depth: off, complexity: off, max-params: off, unicorn/prefer-query-selector: off, no-negated-condition: off, prefer-rest-params: off */
// JAVASCRIPT GERANT L'AFFICHAGE GENERIQUE DES PAGES DES SITES EUROPARL
// Copyright : European Parliament
// Classes JS definies dans ce fichier :
// . Select : Script convertissant un selecteur presents dans l'entete en composant JavaScript
// . convertion de la liste des sites "other websites" en select JS pour le mode reduit
// . affichage accordeon du pied de page en mode reduit
// . gestion de l'affichage sur les menus lateraux (effet parallaxe + mode accordeon)
/* ============================================================================================================================================================================ */
/* === EXPAND/COLLAPSE (Version 2 [+]/[-]) =============================================================================================================== */
/* ============================================================================================================================================================================ */
function expandQuestions() {
const headings = document.querySelectorAll('.ep_expand-title');
Array.prototype.forEach.call(headings, function (h) {
const btn = h.querySelector('.ep_expand-trigger');
const target = h.nextElementSibling;
let button;
let div;
if (h.closest('.ep_item').classList.contains('ep_expand') && !h.closest('.ep_item').classList.contains('loaded-question')) {
button = h.parentNode.querySelectorAll('button')[0];
button.dataset.expanded = true;
button.setAttribute('aria-expanded', true);
div = h.parentNode.querySelectorAll('.ep_expand-content')[0];
div.removeAttribute('hidden');
h.closest('.ep_item').classList.add('loaded-question');
} else if (h.closest('.ep_item').classList.contains('ep_wrapper-expand-collapse') && !h.closest('.ep_item').classList.contains('loaded-question')) {
h.closest('.ep_item').classList.remove('ep_wrapper-expand-collapse');
button = h.parentNode.querySelectorAll('button')[0];
button.dataset.expanded = false;
button.setAttribute('aria-expanded', false);
div = h.parentNode.querySelectorAll('.ep_expand-content')[0];
div.setAttribute('hidden', true);
h.closest('.ep_item').classList.add('loaded-question');
}
function handleClick(event) {
const wrapperExpand = event.target.closest('.ep_item');
const wrapperExpandStyle = wrapperExpand.classList.contains('ep_wrapper-expand-collapse');
const expanded = btn.getAttribute('aria-expanded') === 'true';
const expandedData = btn.dataset.expanded === 'true';
if (wrapperExpandStyle) {
wrapperExpand.classList.remove('ep_wrapper-expand-collapse');
} else {
wrapperExpand.classList.add('ep_wrapper-expand-collapse');
}
btn.setAttribute('aria-expanded', !expanded);
btn.dataset.expanded = !expandedData;
target.hidden = expanded;
}
if (btn && !btn.classList.contains('has-click-handler')) {
btn.classList.add('has-click-handler');
btn.addEventListener('click', handleClick);
}
});
}
/* global define */
/* ============================================================================================================================================================================ */
/* === INITIALISATION DES FONCTIONNALITES DU SITE ============================================================================================================================= */
/* ============================================================================================================================================================================ */
const Data = {};
Data.initscript = true; // Indicateur d'ajout d'evenement
Data.toolbar = null; // Donnees utiles pour l'affichage parallaxe de l'entete du site
Data.language = null; // Donnees utiles pour la convertion du selecteur linguistique
Data.otherwebsites = null; // Donnees utiles pour la convertion du selecteur des autres sites
Data.navigation = null; // Donnees utiles pour l'ouverture/fermeture du menu de navigation
Data.search = null; // Donnees utiles pour l'ouverture/fermeture du menu de recherche
Data.footer = null; // Donnees utiles pour l'ouverture/fermeture du pied de page
Data.tableofcontent = null; // Donnees utiles pour l'ouverture/fermeture du menu sommaire (optionnel)
Data.accordions = null; // Donnees utiles pour la convertion des boites en accordeon
Data.timer = 0; // Interval pour les mouvements de scroll
// - VALIDATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VALIDATION : controle de la balise de donnees passe en parametre
function check(d) {
if (typeof d === 'object') {
if (d != null) {
return d.tagName != null;
}
return false;
}
return false;
}
// - INITIALISATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function init(e) {
let i;
let d;
let t;
let r;
let m;
let f;
let o;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Activation des traitements JavaScript
document.body.dataset.jsactive = true;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Identification du type de support utilise pour la lecture ecran
// Liste des appareils mobiles reconnus
m = ['android', 'avantgo', 'blackberry', 'blazer', 'eudoraweb', 'handspring', 'htc', 'iphone', 'ipad', 'ipod', 'kyocera', 'lg', 'motorola', 'netfront', 'nokia', 'palm', 'playstation portable', 'samsung', 'smartphone', 'sonyericsson', 'symbian', 'wap', 'windows ce'];
i = ['iphone', 'ipad', 'ipod'];
// Identification du navigateur et de l'OS
d = navigator.userAgent;
d = String(d).toLowerCase();
// Recherche du navigateur dans la liste
t = m.length - 1;
for (t = t; t >= 0; t--) {
if (d.includes(m[t])) {
document.body.dataset.ismobile = true;
break;
}
}
if (document.body.dataset.ismobile) {
t = i.length - 1;
for (t = t; t >= 0; t--) {
if (d.includes(i[t])) {
document.body.dataset.ios = true;
break;
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
let wailinks = null;
const site = document.querySelector('#website');
const content = document.querySelector('#website-body');
if (check(site)) {
// MENU RACCOURCIS : Recherche du conteneur
t = document.querySelector('#waimenu');
if (check(t)) {
wailinks = t.querySelectorAll('a');
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Recherche des balises (superieure et inferieure)
d = {
top: null,
bottom: null
};
t = site.querySelectorAll('.toolbar');
i = t.length - 1;
for (i = i; i >= 0; i--) {
if (t[i].classList.contains('toolbar_top')) d.top = t[i];else if (t[i].classList.contains('toolbar_bottom')) d.bottom = t[i];
if (d.top != null && d.bottom != null) break;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Traitement de la barre superieure (menu linguistique)
if (Data.language == null && d.top != null) {
// Convertion du menu linguistique original
t = document.querySelector('#language-select');
if (check(t)) {
o = selectHandler.convert(t, {
autoexecute: true
});
if (o.converted) Data.language = o.data;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Traitement de la barre superieure (autres planetes)
if (Data.otherwebsites == null && d.top != null) {
// Duplication du menu "autres sites" par un selecteur JS pour les petites resolutions
t = document.querySelector('#otherwebsites');
if (check(t)) {
r = {
parent: t,
list: null,
links: null,
placeholder: null
};
t = r.parent.querySelectorAll('ol');
if (t.length > 0) t = t[0];
if (check(t)) {
// Fonction temporaire du traitement des liens
f = function (f_id, f_parent, f_placeholder, f_links) {
let f_m;
let f_i;
let f_o;
// Creation du selecteur
const f_t = document.createElement('select');
f_t.setAttribute('id', f_id + '-selectmobile');
f_t.setAttribute('aria-labelledby', f_id + '-label');
f_t.classList.add('ep_field');
// Nettoyage du texte du placeholder
f_i = f_placeholder.querySelectorAll('.ep_name')[0];
f_m = f_i.querySelectorAll('span');
if (f_m.length > 0) {
f_i = '';
for (f_o = 0; f_o < f_m.length; f_o++) {
if (!f_m[f_o].classList.contains('ep_hidden')) f_i += f_m[f_o].innerHTML;
}
} else {
f_i = f_i.innerHTML;
}
// Creation du placeholder
f_o = document.createElement('option');
f_o.setAttribute('value', 'placeholder');
f_o.setAttribute('selected', 'selected');
f_o.setAttribute('disabled', 'disabled');
f_o.dataset.target = '_self';
f_o.append(document.createTextNode(f_i));
f_t.append(f_o);
// Integration des valeurs
f_m = f_links.length;
for (f_i = 0; f_i < f_m; f_i++) {
f_o = document.createElement('option');
f_o.setAttribute('value', f_links[f_i].href);
f_o.dataset.target = f_links[f_i].getAttribute('target') == '_blank' ? '_blank' : '_self';
if (f_links[f_i].getAttribute('title')) f_o.setAttribute('title', f_links[f_i].getAttribute('title'));
f_o.append(document.createTextNode(f_links[f_i].querySelectorAll('.ep_name')[0].innerHTML));
f_t.append(f_o);
}
// Creation des balises de contenu
f_i = document.createElement('div');
f_i.classList.add('ep_select');
f_i.append(f_t);
f_m = document.createElement('form');
f_m.setAttribute('id', f_id + '-formmobile');
f_m.setAttribute('method', 'get');
f_m.setAttribute('action', '');
f_m.classList.add('epjs_mobile');
f_m.append(f_i);
// Integration du selecteur
f_parent.append(f_m);
// Convertion du selecteur
f_i = selectHandler.convert(f_t, {
autoexecute: true,
cb_selection(selectdata) {
selectdata.form.action = selectdata.original.value;
selectdata.form.target = selectdata.options[selectdata.original.selectedIndex].original.dataset.target;
selectHandler.updateselection(selectdata, 'placeholder', false);
if (selectdata.form.target == '_blank') window.open(selectdata.form.action);else location.href = selectdata.form.action;
return false;
}
});
// Autorisation d'acces pour la version mobile
if (f_i.converted) {
f_parent.dataset.converted = true;
return f_i.data.index;
}
return null;
};
// Recherche des liens a integrer
r.list = t;
t = r.list.querySelectorAll('.ep_item');
if (t.length > 0) {
r.links = [];
m = t.length;
for (i = 0; i < m; i++) {
o = t[i].querySelectorAll('a');
if (o[0].classList.length === 0) {
r.links.push(o[0]);
}
}
}
// Recherche du libelle pour le placeholder
t = document.querySelector('#otherwebsites-access');
if (check(t)) r.placeholder = t;
// Verification de l'acces aux differentes donnees
if (r.parent != null && r.links != null && r.placeholder != null) {
// Initialisation de l'objet de donnees
Data.otherwebsites = {
main: null,
more: null
};
// Traitement du selecteur principal utilise en petite resolution
Data.otherwebsites.main = f('otherwebsites', r.parent, r.placeholder, r.links);
// Traitement du second selecteur pour les grandes resolutions uniquement
t = document.querySelector('#more-otherwebsites');
if (check(t)) {
r = {
parent: t,
list: null,
links: null,
placeholder: null
};
// Recherche du placeholder
t = document.querySelector('#more-otherwebsites-access');
if (check(t)) r.placeholder = t;
// Recherche des liens
t = r.parent.querySelectorAll('ol');
if (t.length > 0) t = t[0];
if (check(t)) {
t = t.querySelectorAll('a');
if (t.length > 0) r.links = t;
}
// Traitement du selecteur
if (r.parent != null && r.links != null && r.placeholder != null) {
Data.otherwebsites.more = f('more-otherwebsites', r.parent, r.placeholder, r.links);
}
// Verification de la convertion des listes
if (Data.otherwebsites.main == null && Data.otherwebsites.more == null) {
Data.otherwebsites = null;
} else {
if (Data.otherwebsites.main != null) setTimeout(function () {
selectHandler.resize(Data.otherwebsites.main);
}, 50);
if (Data.otherwebsites.more != null) setTimeout(function () {
selectHandler.resize(Data.otherwebsites.more);
}, 50);
}
}
}
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Traitement de la barre inferieure (effet parallaxe)
// I'm commmenting this out to avoid the instanciation of Data.toolbar in this function (window.init).
// The goal is to prevent bogus interactions with the refactored header
// tmk [2022-07-08]
// if (Data.toolbar == null && d.bottom != null) {
// // Recherche de la balise 'header' situee au dessus de la barre d'outil (balise utile pour le calcul du scroll minimum avant d'activer le parallaxe)
// t = document
// .querySelector('#website-header')
// .querySelectorAll('.ep_header')[0];
// // Effet Parallaxe : Initialisation de l'objet de donnees
// Data.toolbar = {};
// Data.toolbar.bar = d.bottom; // Reference de la balise de la barre
// Data.toolbar.scrollsize = 0; // Valeur de la hauteur de la scrollbar
// Data.toolbar.page = document.body; // Cible pour l'ajout du parametre de traitement
// Data.toolbar.header = t; // Reference de la hauteur minimum pour l'activation du parallaxe
// }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Traitement de la barre inferieure (moteur de recherche)
if (Data.search == null && Data.toolbar != null) {
// Traitement du moteur de recherche
m = document.querySelector('#search');
if (check(m)) {
t = document.querySelector('#search-field');
d = m.querySelectorAll('.ep_send');
d = d.length > 0 ? d[0] : null;
r = m.querySelectorAll('.ep_title');
r = r.length > 0 ? r[0] : null;
if (check(t) && check(d) && check(r)) {
// Initialisation de l'objet de donnees
Data.search = {};
Data.search.reducemode = false; // Definition du mode d'affichage du menu : deploye (false) ou reduit (true)
Data.search.scanmode = 0; // Indicateur de scan de l'etat du champ lorsque le focus est assigne au champ
Data.search.timer = 0; // Timer pour l'attente avant la cloture du menu
Data.search.parent = m.parentNode; // Reference au menu
Data.search.form = m; // Reference au formulaire
Data.search.field = t; // Reference au champ texte
Data.search.button = d; // Reference au bouton d'execution du formulaire
Data.search.access = r; // Reference au bouton d'ouverture/fermeture
Data.search.animate = Data.search.field.parentNode.parentNode; // Reference du conteneur a animer
// Suppression des liens d'ouverture/fermeture indesirables
t = Data.search.parent.querySelectorAll('.ep_menu-access');
if (t.length > 1) t[1].remove();
if (t.length > 0) t[0].remove();
// Activation des mises a jour visuelles
Data.search.parent.dataset.converted = true;
// Traitement des balises pour l'ouverture et la fermeture du menu
Data.search.access.setAttribute('tabindex', 0);
Data.search.access.setAttribute('aria-expanded', false);
Data.search.access.setAttribute('aria-controls', 'search-contentform');
// Data.search.animate.setAttribute('aria-hidden', true);
Data.search.animate.setAttribute('id', 'search-contentform');
// Ajout des evenements pour l'ouverture et la fermeture du menu
Data.search.access.addEventListener('click', search_display, false);
Data.search.animate.addEventListener('transitionend', search_focus, false);
Data.search.button.addEventListener('focus', search_button, false);
Data.search.button.addEventListener('blur', search_button, false);
// Ajout des evenements pour l'activation ou non du formulaire selon le contenu du champ texte
Data.search.form.addEventListener('submit', search_submit, false);
// Ajout de l'evenement pour la navigation clavier
Data.search.form.addEventListener('keydown', search_key, true);
Data.search.form.addEventListener('keyup', search_validation, true);
Data.search.field.addEventListener('focus', search_scan, false);
Data.search.field.addEventListener('blur', search_scan, false);
// Ajout des evenements pour la fermeture du menu via clic hors de la zone
t = Data.search.parent.querySelectorAll('*');
r = t.length - 1;
Data.search.parent.classList.add('epjs_search');
for (r = r; r >= 0; r--) {
t[r].classList.add('epjs_search');
}
document.addEventListener('touchstart', search_check, false);
document.addEventListener('click', search_check, false);
// Verification de l'acces au formulaire
search_validation();
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BARRE D'OUTILS : Traitement de la barre inferieure (menu de navigation)
if (Data.navigation == null && Data.toolbar != null) {
d = {
parent: null,
display: {
parent: null,
content: null,
open: null,
close: null
},
links: null
};
// Recherche des balises
t = document.querySelector('#navigation');
if (check(t)) {
d.parent = t;
// Recherche des liens d'ouverture/fermeture du menu
t = d.parent.querySelectorAll('.ep_menu-access');
i = t.length - 1;
for (i = i; i >= 0; i--) {
if (t[i].classList.contains('ep_openaccess')) d.display.open = t[i];else if (t[i].classList.contains('ep_closeaccess')) d.display.close = t[i];
if (d.display.open != null && d.display.close != null) break;
}
// Recherche du conteneur principal a animer
t = d.parent.querySelectorAll('.ep_menu-container');
if (t.length > 0) {
d.display.parent = t[0];
// Recherche du conteneur de lien
t = d.display.parent.childNodes.length;
for (i = 0; i < t; i++) {
if (check(d.display.parent.childNodes[i]) && d.display.parent.childNodes[i].tagName.toLowerCase() == 'div') {
d.display.content = d.display.parent.childNodes[i];
break;
}
}
// Recherche de la liste des liens du menu (par niveau)
if (d.display.content != null) {
t = d.display.content.querySelectorAll('.ep_menu');
if (t.length > 0) {
t = t[0];
d.links = {
parent: t,
list: {
all: [],
level0: [],
level1: [],
level2: []
},
ismenu: {
level0: [],
level1: [],
level2: []
}
};
// Creation de la fonction de recuperation de noeud selon la profondeur
f = function (f_parentnode, f_parentlevel, f_parentindex) {
let f_i;
let f_m;
let f_t = f_parentnode.querySelectorAll('ol');
if (f_t.length > 0) {
f_t = f_t[0];
f_m = f_t.childNodes.length;
for (f_i = 0; f_i < f_m; f_i++) {
if (check(f_t.childNodes[f_i])) {
if (f_t.childNodes[f_i].classList.contains('ep_item') && f_t.childNodes[f_i].classList.contains('ep_directlink')) {
d.links.list.all.push({
ismenu: false,
tag: f_t.childNodes[f_i],
level: f_parentlevel,
parent: f_parentindex,
children: [],
order: d.links.list['level' + f_parentlevel].length
});
d.links.list['level' + f_parentlevel].push(d.links.list.all.length - 1);
if (f_parentindex != null) d.links.list.all[f_parentindex].children.push(d.links.list.all.length - 1);
} else if (f_t.childNodes[f_i].classList.contains('ep_item') && f_t.childNodes[f_i].classList.contains('ep_hasmenu')) {
d.links.list.all.push({
ismenu: true,
tag: f_t.childNodes[f_i],
level: f_parentlevel,
parent: f_parentindex,
children: [],
order: d.links.list['level' + f_parentlevel].length
});
d.links.ismenu['level' + f_parentlevel].push(d.links.list.all.length - 1);
d.links.list['level' + f_parentlevel].push(d.links.list.all.length - 1);
if (f_parentindex != null) d.links.list.all[f_parentindex].children.push(d.links.list.all.length - 1);
}
}
}
}
};
// Identification des balises de liens du premier niveau selon les criteres
f(t, 0, null);
// Identification des balises de liens du second niveau selon les criteres
if (d.links.ismenu.level0.length > 0) {
m = d.links.ismenu.level0.length;
for (i = 0; i < m; i++) {
t = d.links.list.all[d.links.ismenu.level0[i]];
f(t.tag, 1, d.links.ismenu.level0[i]);
}
}
// Identification des balises de liens du troisieme niveau selon les criteres
if (d.links.ismenu.level1.length > 0) {
m = d.links.ismenu.level1.length;
for (i = 0; i < m; i++) {
t = d.links.list.all[d.links.ismenu.level1[i]];
f(t.tag, 2, d.links.ismenu.level1[i]);
}
}
// Verification de la quantite de liens obtenus
if (d.links.list.all.length <= 0) d.links = null;
}
}
}
}
// Verification de l'acces aux balises
if (d.parent != null && d.display.parent != null && d.display.content != null && d.display.open != null && d.display.close != null && d.links != null) {
// Recherche du tag "categorie" optionnel a afficher en parallaxe
// Initialisation de l'objet de donnees
Data.navigation = {};
// General
Data.navigation.menu = d.parent; // Reference du conteneur principal du menu
Data.navigation.page = document.querySelector('#website'); // Reference de la page pour le deplacement du scroll dans la navigation parallaxe
Data.navigation.headerpage = Data.toolbar.header; // Reference de l'entete de la page pour le deplacement lors de la suppression de la scrollbar
Data.navigation.headerbar = Data.navigation.menu.parentNode; // Reference du conteneur de la barre de navigation pour l'alignement de l'effet parallaxe lors de la suppression de la scrollbar
Data.navigation.bodypage = document.querySelector('#website-body'); // Reference du corps de la page pour le deplacement lors de la suppression de la scrollbar
Data.navigation.footerpage = document.querySelector('#website-footer'); // Reference du pied de la page pour le deplacement lors de la suppression de la scrollbar
// Donnees utiles pour la version reduite
Data.navigation.anim = d.display.content; // Reference du conteneur a animer
Data.navigation.menuaccess = null; // Reference du bouton d'ouverture et fermeture du menu reduit
Data.navigation.filter = null; // Reference du selecteur du filtre du menu
Data.navigation.focus = []; // Reference des balises a cibler lors de l'assignation du focus
Data.navigation.scrollfollow = false; // Indicateur du suivi du scroll manuel sur le menu
Data.navigation.cursorY = 0; // Position initial du curseur lors du debut du scroll
Data.navigation.scrollY = 0; // Position initial du scroll du menu lors du debut du deplacement
Data.navigation.scrollratio = 0; // Ratio entre la hauteur du menu et la hauteur de la page
Data.navigation.access = null; // Reference du bouton ayant appele pour la navigation clavier
// Donnees utiles pour la version deployee
Data.navigation.bar = d.links.parent; // Reference du conteneur des liens
Data.navigation.links = null; // Liste des index et balises de tous les elements du menu
Data.navigation.ismenu = null; // Reference des index des liens de type "menu"
Data.navigation.selectedlink = null; // Index du lien actuellement accessible via clavier (focus)
// Ajout du parametre indiquant le traitement du menu
Data.navigation.menu.dataset.converted = true;
// Ajout de l'action d'ecoute pour les clics hors du menu reduit et/ou deploye
document.addEventListener('click', navigation_checkclick, false);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GENERAL
// Convertion du selecteur de filtre (si present)
t = Data.navigation.menu.querySelectorAll('.ep_menu-filter');
if (t.length > 0) {
t = t[0];
// Recherche des balises de selection
t = t.querySelectorAll('select');
if (t.length > 0) {
t = selectHandler.convert(t[0], {
autoexecute: true,
openbykeyboard: false
});
if (t.converted) {
Data.navigation.filter = t.data;
// Redimensionnement du selecteur pour Firefox
navigation_select();
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AFFICHAGE DU MENU PRINCIPAL (version reduite)
// Suppression des boutons d'ouverture et de fermeture du menu inutile pour la version JS
t = d.display.open.querySelectorAll('a');
if (t.length > 0) t[0].parentNode.remove();
t = d.display.close.querySelectorAll('a');
if (t.length > 0) t[0].parentNode.remove();
// Ajout de la classe CSS utile pour la gestion d'ouverture/fermeture du menu
t = Data.navigation.menu.querySelectorAll('*');
i = t.length - 1;
for (i = i; i >= 0; i--) {
t[i].classList.add('epjs_navigation');
}
// Sauvegarde du bouton d'acces au menu
Data.navigation.menuaccess = d.display.open.querySelectorAll('.ep_button')[0].parentNode;
Data.navigation.menuaccess.setAttribute('tabindex', '0');
// Ajout des actions sur le bouton d'acces pour l'ouverture du menu reduit
Data.navigation.menuaccess.addEventListener('click', navigation_switch, false);
Data.navigation.menuaccess.addEventListener('keydown', navigation_access, false);
// Recherche du premier element cliquable du menu pour la gestion du focus entrant et sortant en mode reduit
t = Data.navigation.anim.querySelectorAll('.ep_category');
if (t.length > 0) {
t = t[0];
if (t.querySelectorAll('a').length > 0) Data.navigation.focus[0] = {
type: 'category',
tag: t.querySelectorAll('a')[0]
};
}
if (Data.navigation.focus[0] == null) Data.navigation.focus[0] = {
type: 'menu',
tag: null
};else Data.navigation.focus[0].tag.addEventListener('keydown', navigation_keyboard, false);
if (Data.navigation.filter != null) {
Data.navigation.focus[1] = {
type: 'filter',
tag: document.getElementById(Data.navigation.filter.button.text.id)
};
}
if (Data.navigation.focus[1] == null) Data.navigation.focus[1] = {
type: 'menu',
tag: null
};else Data.navigation.focus[1].tag.addEventListener('keydown', navigation_keyboard, false);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AFFICHAGE DU MENU PRINCIPAL (version deployee)
// Initialisation de l'objet de donnees temporaires pour le traitement des liens du "treeview"
o = {};
o.links = {
all: [],
level0: [],
level1: [],
level2: []
}; // Reference des index et balises de tous les elements du menu
o.ismenu = {
all: [],
level0: [],
level1: [],
level2: []
}; // Reference des index des liens de type "menu"
// Traitement de tous les liens obtenus
m = d.links.list.all.length;
for (i = 0; i < m; i++) {
t = d.links.list.all[i];
// Recuperation du lien principal (ouverture du menu ou acces au site)
r = t.tag.querySelectorAll('.ep_button');
t.button = r.length > 0 ? r[0] : null;
if (t.button != null) {
r = t.ismenu ? t.button.querySelectorAll('span') : t.button.querySelectorAll('a');
t.button = r.length > 0 ? r[0] : null;
}
// Stockage des informations
o.links.all.push({
index: o.links.all.length,
// Index du lien dans la liste
block: t.tag,
// Reference a la balise du lien
ismenu: t.ismenu,
// Type de element du menu (lien direct ou sous-menu)
level: t.level,
// Niveau de profondeur du lien dans le menu de navigation
parent: t.parent,
// Index de l'element parent ("null" s'il ne fait pas partie d'un sous-menu)
children: t.children,
// Index des elements enfant
button: t.button,
// Reference a la balise servant de lien ou d'ouverture/fermeture du menu
animtag: null,
// Reference a la balise d'animation d'ouverture/fermeture de contenu
list: null,
// Reference a la balise de contenu de liens
order: t.order // Position de la balise dans la liste par niveau
});
// Sauvegarde de l'element par niveau
o.links['level' + t.level].push(i);
// Traitement des liens de type "menu"
if (t.ismenu) {
// Stockage de l'information
o.ismenu.all.push(i);
o.ismenu['level' + t.level].push(i);
}
}
d = false;
// Traitement des liens "menu" par niveau
if (o.ismenu.all.length > 0) {
d = true;
m = o.ismenu.all.length;
for (i = 0; i < m; i++) {
t = o.links.all[o.ismenu.all[i]];
// Recherche des balises utiles pour l'affichage en accordeon
r = t.block.querySelectorAll('ol');
if (r.length > 0) {
t.list = r[0];
t.animtag = r[0].parentNode;
}
// Correction des liens de premier niveau
if (t.level == 0) {
// Recherche des balises ouvrantes et fermantes du menu a supprimer (inutile pour la gestion en "treeview")
r = t.block.querySelectorAll('.ep_closeaccess');
if (r.length > 0) r[0].remove();
r = t.block.querySelectorAll('.ep_openaccess');
if (r.length > 0) {
r = r[0];
r.classList.remove('ep_openaccess');
r = r.querySelectorAll('a');
if (r.length > 0) {
r[0].parentNode.setAttribute('id', r[0].id);
r[0].remove();
}
}
}
// Verification de l'acces aux balises
if (t.button == null || t.animtag == null || t.list == null) {
d = false;
break;
}
}
}
// Traitement du menu
if (o.links.all.length > 0) {
// Sauvegarde des valeurs obtenues
Data.navigation.links = o.links;
Data.navigation.ismenu = o.ismenu;
// Traitement des elements du menu selon les niveaux
m = Data.navigation.links.all.length;
for (let i = 0; i < m; i++) {
d = Data.navigation.links.all[i];
// Ajout des references a la balise
d.block.dataset.navindex = i;
d.button.dataset.navindex = i;
d.button.parentNode.dataset.navindex = i;
// Ajout des parametres d'accessibilite
d.block.removeAttribute('tabindex');
d.button.setAttribute('tabindex', '-1');
// Gestion du mode "menu"
if (d.ismenu) {
// Ajout de l'identification du bloc
d.animtag.dataset.navindex = i;
d.list.dataset.navindex = i;
// Ajout des parametres de fermeture
d.block.setAttribute('aria-expanded', false);
// Ajout des actions d'ouverture/fermeture
d.button.addEventListener('click', navigation_expand, false);
d.button.addEventListener('touchend', navigation_expand, false);
d.animtag.addEventListener('transitionend', navigation_expandend, false);
if (d.level == 1) {
d.list.addEventListener('mouseover', navigation_mouse, false);
d.list.addEventListener('mouseout', navigation_mouse, false);
}
}
// Gestion des actions de survol
if (d.level <= 1) {
d.button.parentNode.addEventListener('mouseover', navigation_mouse, false);
d.button.addEventListener('mouseout', navigation_mouse, false);
}
// Gestion des actions clavier
d.button.addEventListener('keydown', navigation_keyboard, false);
}
// Autorisation d'acces au premier lien du menu (navigation clavier)
Data.navigation.links.all[0].button.setAttribute('tabindex', '0');
Data.navigation.selectedlink = Data.navigation.links.all[0];
// Ajout de la fermeture du menu au survol de la page
document.addEventListener('mouseover', navigation_checkover, false);
document.addEventListener('touchstart', navigation_checkover, false);
// Ajout du marqueur sur les balises du menu
i = Data.navigation.links.level0.length - 1;
for (i = i; i >= 0; i--) {
// Identification du lien de premier niveau
d = Data.navigation.links.all[Data.navigation.links.level0[i]].block;
// Ajout du marqueur
d.classList.add('epjs_navigationlinks');
// Ajout du marqueur sur les balises interieures
d = d.querySelectorAll('*');
m = d.length - 1;
for (m = m; m >= 0; m--) {
d[m].classList.add('epjs_navigationlinks');
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DEFINITION DU MODE D'AFFICHAGE SELON L'ECRAN
// Definition du mode d'affichage du menu
navigation_mode(Data.navigation.menuaccess.offsetWidth > 1);
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// PIED DE PAGE : Recherche des balises
d = {
footer: null,
specific: null,
general: null
};
t = document.querySelector('#website-footer');
if (Data.footer == null && check(t)) {
d.footer = t;
// Fonction temporaire du traitement des liens
f = function (f_classparent) {
let f_t;
let f_i;
// Initialisation de l'objet de donnees
const f_d = {
parent: null,
title: null,
ticon: null,
open: null,
close: null,
content: null,
list: null
};
// Recherche du bloc parent
const f_p = d.footer.getElementsByClassName(f_classparent);
if (f_p.length > 0) {
f_d.parent = f_p[0];
// Recherche des liens d'ouverture/fermeture sans JS
f_t = f_d.parent.querySelectorAll('.ep_menu-access');
f_i = f_t.length - 1;
for (f_i = f_i; f_i >= 0; f_i--) {
if (f_t[f_i].classList.contains('ep_openaccess')) f_d.open = f_t[f_i];else if (f_t[f_i].classList.contains('ep_closeaccess')) f_d.close = f_t[f_i];
if (f_d.open != null && f_d.close != null) break;
}
// Recherche du titre du bloc pour la convertion en lien d'ouverture/fermeture via JS
f_t = f_d.parent.querySelectorAll('.ep_title');
if (f_t.length > 0) {
f_d.title = f_t[0];
}
// Recherche du bloc de contenu a deployer
f_t = f_d.parent.querySelectorAll('.ep_list');
if (f_t.length > 0) {
f_d.content = f_t[0];
f_t = f_d.content.classList.contains('ep-layout_category') ? f_d.content.querySelectorAll('div') : f_d.content.querySelectorAll('ul');
if (f_t.length > 0) {
f_d.list = f_t[0];
}
}
}
// Envoi du resultat
return check(f_d.parent) && check(f_d.title) && check(f_d.open) && check(f_d.close) && check(f_d.content) && check(f_d.list) ? f_d : null;
};
// Analyse des liens specifiques au site
d.specific = f('ep_websitelinks');
// Analyse des liens generiques aux sites Europarl
d.general = f('ep_europarllinks');
// Verification des donnees obtenues
if (d.general != null) {
Data.footer = {};
Data.footer.tabparent = d.general.parent.parentNode;
Data.footer.specific = null;
Data.footer.general = null;
// Traitement de la liste de liens generiques
// Initialisation de l'objet de donnees
t = accordionHandler.convert(d.general.parent,
// Reference du conteneur global
d.general.title,
// Reference du nouveau bouton d'ouverture [+]/[-] (conteneur global)
d.general.content,
// Reference du conteneur a animer
d.general.list,
// Reference de la liste generale des liens
{
openbtn: d.general.open,
// Reference de la balise du bouton d'ouverture d'origine a supprimer
closebtn: d.general.close,
// Reference de la balise du bouton de fermeture d'origine a supprimer
clickonicon: true // Autorisation de la creation d'un bouton icone receptionant l'action de clic
});
if (t.converted) Data.footer.general = t.data;
// Traitement de la liste de liens specifiques
if (Data.footer.general != null && d.specific != null) {
// Initialisation de l'objet de donnees
t = accordionHandler.convert(d.specific.parent,
// Reference du conteneur global
d.specific.title,
// Reference du nouveau bouton d'ouverture [+]/[-] (conteneur global)
d.specific.content,
// Reference du conteneur a animer
d.specific.list,
// Reference de la liste generale des liens
{
openbtn: d.specific.open,
// Reference de la balise du bouton d'ouverture d'origine a supprimer
closebtn: d.specific.close,
// Reference de la balise du bouton de fermeture d'origine a supprimer
clickonicon: true // Autorisation de la creation d'un bouton icone receptionant l'action de clic
});
if (t.converted) {
Data.footer.specific = t.data;
// Ajout des dependances entre les deux blocs
accordionHandler.setdependency(Data.footer.specific.index, [Data.footer.specific.index, Data.footer.general.index]);
accordionHandler.setdependency(Data.footer.general.index, [Data.footer.specific.index, Data.footer.general.index]);
}
} else {
Data.footer = null;
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// MENU SOMMAIRE : Recherche des balises
if (check(content)) {
t = site.querySelectorAll('.ep-layout_tableofcontent');
if (t.length > 0) {
i = t.length - 1;
for (i = i; i >= 0; i--) {
TableOfContent.convert(t[i], null);
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// BLOC DE SUIVI : Recherche des balises devant suivre le scroll de la page
if (check(content)) {
t = site.querySelectorAll('.ep-layout_followingscroll');
if (t.length > 0) {
i = t.length - 1;
for (i = i; i >= 0; i--) {
FollowingScroll.convert(t[i], null);
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// SELECTEURS : Recherche des balises