﻿(function (){
function fallbackCopy(text){
var textarea=document.createElement("textarea");
textarea.value=text;
textarea.setAttribute("readonly", "readonly");
textarea.style.position="fixed";
textarea.style.top="-9999px";
textarea.style.left="-9999px";
document.body.appendChild(textarea);
textarea.focus();
textarea.select();
var copied=false;
try {
copied=document.execCommand ("copy");
} catch (error){
copied=false;
}
document.body.removeChild(textarea);
return copied;
}
function copyText(text){
if(navigator.clipboard&&typeof navigator.clipboard.writeText==="function"){
return navigator.clipboard.writeText(text).then(function (){
return true;
}).catch(function (){
return fallbackCopy(text);
});
}
return Promise.resolve(fallbackCopy(text));
}
function setStatus(statusNode, message, isError){
if(!statusNode){
return;
}
statusNode.textContent=message;
statusNode.classList.toggle("is-error", !!isError);
}
function normalizeZone(value){
value=String(value||"").toLowerCase();
return value==="a"||value==="b"||value==="c" ? value:"";
}
function withHolidayZone(url, zone){
var parsed;
try {
parsed=new URL(url, window.location.href);
} catch (error){
return url;
}
zone=normalizeZone(zone);
if(zone){
parsed.searchParams.set("vacances_zone", zone);
}else{
parsed.searchParams.delete("vacances_zone");
}
return parsed.toString();
}
function init(){
var agendaPage=document.querySelector(".pde-page--agenda");
var modal=document.querySelector("[data-agenda-modal]");
var links=document.querySelectorAll("[data-agenda-copy-link]");
if(agendaPage){
moveExistingSearchIntoAgenda(agendaPage);
}
if(!modal||!links.length){
return;
}
var urlInput=modal.querySelector("[data-agenda-modal-url]");
var copyButton=modal.querySelector("[data-agenda-modal-copy]");
var downloadLink=modal.querySelector("[data-agenda-modal-download]");
var statusNode=modal.querySelector("[data-agenda-modal-status]");
var zoneInputs=modal.querySelectorAll("[data-agenda-zone]");
var closeTargets=modal.querySelectorAll("[data-agenda-modal-close]");
var baseUrl="";
var activeUrl="";
function getSelectedZone(){
var selected=modal.querySelector("[data-agenda-zone]:checked");
return selected ? normalizeZone(selected.value):"";
}
function updateActiveUrl(){
activeUrl=withHolidayZone(baseUrl, getSelectedZone());
if(urlInput){
urlInput.value=activeUrl;
}
if(downloadLink){
downloadLink.href=activeUrl;
}}
function openModal(url){
baseUrl=url;
updateActiveUrl();
modal.hidden=false;
document.body.classList.add("pde-agenda-modal-open");
if(zoneInputs.length){
setStatus(
statusNode,
"Choisissez votre zone de vacances scolaires, puis copiez l'URL pour l'ajouter a votre agenda.",
false
);
}else{
setStatus(
statusNode,
"Copiez l'URL ci-dessous pour ajouter ce calendrier a votre agenda.",
false
);
}
if(urlInput){
window.setTimeout(function (){
urlInput.focus();
urlInput.select();
}, 30);
}}
function closeModal(){
modal.hidden=true;
document.body.classList.remove("pde-agenda-modal-open");
}
links.forEach(function (link){
if(link.dataset.copyBound==="1"){
return;
}
link.dataset.copyBound="1";
link.addEventListener("click", function (event){
event.preventDefault();
openModal(link.getAttribute("data-copy-url")||link.href);
});
});
zoneInputs.forEach(function (input){
input.addEventListener("change", function (){
var selectedZone;
updateActiveUrl();
selectedZone=getSelectedZone();
if(selectedZone){
setStatus(
statusNode,
"Le lien affiche maintenant uniquement les vacances scolaires de la zone " + selectedZone.toUpperCase() + ", avec les autres evenements de l'agenda.",
false
);
}else{
setStatus(statusNode, "Le lien affiche toutes les zones de vacances scolaires, comme le calendrier actuel.", false);
}});
});
closeTargets.forEach(function (target){
target.addEventListener("click", function (){
closeModal();
});
});
if(copyButton){
copyButton.addEventListener("click", function (){
if(!activeUrl){
return;
}
copyText(activeUrl).then(function (copied){
if(copied){
setStatus(statusNode, "L'URL a ete copiee. Vous pouvez maintenant la coller dans votre agenda perso.", false);
}else{
setStatus(statusNode, "La copie automatique a echoue. Copiez l'URL affichee puis ajoutez-la a votre agenda perso.", true);
}});
});
}
document.addEventListener("keydown", function (event){
if(event.key==="Escape"&&!modal.hidden){
closeModal();
}});
}
function moveExistingSearchIntoAgenda(agendaPage){
var feed=agendaPage.querySelector(".pde-agenda-feed");
var source=document.querySelector(".pde-agenda-search-source");
var node=agendaPage.previousElementSibling;
var search=null;
var wrapper=null;
var checked=0;
if(!feed){
return;
}
if(source&&source.querySelector){
search=source.querySelector(".pde-recherche");
wrapper=source;
}
while (node&&checked < 8){
if(search){
break;
}
checked +=1;
if(node.matches&&node.matches(".pde-recherche")){
search=node;
break;
}
if(node.querySelector){
search=node.querySelector(".pde-recherche");
if(search){
wrapper=node;
break;
}}
node=node.previousElementSibling;
}
if(search&&search.parentNode){
if(wrapper&&wrapper.hidden){
wrapper.hidden=false;
}
feed.insertAdjacentElement("afterend", search);
if(wrapper&&wrapper!==search&&wrapper.textContent.trim()===""&&!wrapper.querySelector(".pde-recherche")){
wrapper.remove();
}}
}
if(document.readyState==="loading"){
document.addEventListener("DOMContentLoaded", init);
}else{
init();
}})();