server/assets/production/scripts/home.js

1 line
No EOL
5 KiB
JavaScript

function createEl(e=!1,n="div"){let t=document.createElement(n);return 0!=e&&(t.className=e),t}let navOpened=!1,oldNavText="",oldNavIcon="",navEnabler=document.getElementById("nav-enabler"),navEnablerText=document.getElementById("nav-enabler-text"),navEnablerIcon=document.getElementById("nav-enabler-icon"),navContent=document.getElementById("nav-content"),navAll=document.getElementById("nav-all"),mosaic=document.getElementById("mosaic"),mosaicCount=document.getElementById("mosaic-count"),tags=[],navEnablerExists=!1;function closeMenu(){navEnablerText.textContent=oldNavText,navEnablerIcon.style.transform="rotate(0deg)",navContent.style.maxHeight=null}function shuffle(e){for(var n,t,a=e.length;0!==a;)t=Math.floor(Math.random()*a),n=e[a-=1],e[a]=e[t],e[t]=n;return e}navEnabler.onclick=async()=>{navEnablerExists=!0,navOpened?closeMenu():(oldNavText=navEnablerText.textContent,navEnablerText.textContent="Minimiser le menu",navEnablerIcon.style.transform="rotate(90eg)",navContent.style.maxHeight=navContent.scrollHeight+"px"),navOpened=!navOpened};const randomBtn=document.getElementById("random-btn"),sortBtn=document.getElementById("sort-btn");let sort=!1;function renderNavItem(e){let n=createEl("nav-item"),t=createEl("nav-icon"),a=createEl(e.icon,"i");t.appendChild(a),n.appendChild(t);let r=createEl("nav-item-content"),o=createEl("nav-title");o.textContent=e.name,r.appendChild(o);let l=createEl("nav-access"),i=createEl("fas fa-chevron-right","i");return l.appendChild(i),r.appendChild(o),r.appendChild(l),n.appendChild(r),n}function setAttributes(e,n){for(var t in n)attr=document.createAttribute(t),attr.value=n[t],e.attributes.setNamedItem(attr)}function renderCard(e){let n=createEl("card","a"),t=createEl("card-image-container"),a=createEl("card-image");a.style=`background-image: url('${mediaBaseUrl+"/"+e.thumbnail}')`,t.appendChild(a),n.appendChild(t);let r=createEl("card-content"),o=createEl(),l=createEl("card-title-container"),i=createEl("card-title","h2");i.textContent=e.name,l.appendChild(i);let c=createEl("card-icon");if(Array.isArray(e.tags)&&e.tags.length>0){let n=tags.filter(n=>e.tags[0]===n._id)[0];c.innerHTML=n.iconHTML}l.appendChild(c),o.appendChild(l);let s=createEl("card-description");s.textContent=e.description;let d="/association/"+e.slug;return isProposed&&(d+="?version=proposed"),o.appendChild(s),r.appendChild(o),n.appendChild(r),n.href=d,n}organizations=shuffle(organizations),randomBtn.onclick=()=>{sort&&(organizations=shuffle(organizations),enableTag(currentTag,!0),sort=!1,randomBtn.classList.add("enabled"),sortBtn.classList.remove("enabled"))},sortBtn.onclick=()=>{sort||(organizations=organizations.sort((e,n)=>{var t=e.name.toUpperCase(),a=n.name.toUpperCase();return t<a?-1:t>a?1:0}),enableTag(currentTag,!0),sort=!0,sortBtn.classList.add("enabled"),randomBtn.classList.remove("enabled"))};let currentTag=null,currentCardContainer=null;function enableTag(e,n=!1,t=!1){let a="nav-all"===e.id,r="";a||(r=e.attributes["data-tag-id"].value);let o=organizations.filter(e=>e.tags.filter(e=>e===r).length>0||a);renderMosaic(o),e.className+=" enabled",null!==currentTag&&(currentTag.className=currentTag.className.replace("enabled","")),currentTag=e,n||(null==o||o.length<=0?mosaicCount.textContent="Aucune association listée":1===o.length?mosaicCount.textContent="Une association listée":mosaicCount.textContent=o.length+" associations listées",navEnablerExists&&!t?(navOpened=!navOpened,closeMenu(),document.getElementsByClassName("content")[0].scrollIntoView(!0)):window.scrollY()>300&&!t&&document.getElementsByClassName("content")[0].scrollIntoView(!0))}function posY(e){for(var n=e,t=0;n&&"body"!==n.tagName.toLowerCase();)t+=n.offsetTop,n=n.offsetParent;return t}function viewPortHeight(){var e=document.documentElement;return window.innerWidth?window.innerHeight:e&&!isNaN(e.clientHeight)?e.clientHeight:0}function scrollY(){return window.pageYOffset?window.pageYOffset:Math.max(document.documentElement.scrollTop,document.body.scrollTop)}function isVisible(e){var n=viewPortHeight(),t=scrollY();return!(posY(e)>n+t)}let rendering=!0,page=0,elementsPerPage=5,focusPoint=null,focusElementPos=2,cardContainer=null,currentOrganizations=[],pageCount=0;function renderPage(){rendering=!0;let e=currentOrganizations.slice(page*elementsPerPage,(page+1)*elementsPerPage);e.forEach((n,t)=>{let a=renderCard(n);cardContainer.appendChild(a),t===e.length-focusElementPos&&(focusPoint=a)}),rendering=!1}function renderMosaic(e){cardContainer=createEl("card-container"),currentOrganizations=e,page=0,pageCount=Math.floor(e.length/elementsPerPage),renderPage(),null!==currentCardContainer&&mosaic.removeChild(currentCardContainer),currentCardContainer=cardContainer,mosaic.appendChild(cardContainer)}window.onscroll=()=>{null!=focusPoint&&isVisible(focusPoint)&&!rendering&&page+1<pageCount+1&&(page++,renderPage())},window.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll("#nav-content .nav-item").forEach(e=>{e.onclick=()=>enableTag(e),"nav-all"!==e.id&&tags.push({_id:e.attributes["data-tag-id"].value,iconHTML:e.querySelector(".nav-icon").innerHTML})}),enableTag(navAll,!1,!0)});