js/brivembed.min.js
document.addEventListener("DOMContentLoaded",()=>{const e="brivembed_allow";let t=(()=>{try{return JSON.parse(localStorage.getItem(e))||{}}catch{return{}}})();const n=()=>localStorage.setItem(e,JSON.stringify(t)),r={codepen:{label:"CodePen",src:({code:e,user:t=CODEPEN_USER,tab:n="result",editable:r="true"})=>`https://codepen.io/${encodeURIComponent(t)}/embed/${encodeURIComponent(e)}?default-tab=${encodeURIComponent(n)}&editable=${encodeURIComponent(r)}`},dailymotion:{label:"Dailymotion",src:({code:e})=>`https://geo.dailymotion.com/player.html?video=${encodeURIComponent(e)}`},githubpages:{label:"GitHub Pages"},youtube:{label:"YouTube",src:({code:e})=>`https://www.youtube.com/embed/${encodeURIComponent(e)}`}},a=e=>r[e.dataset.provider],o=(e,t)=>{const n=e.querySelector(".brivembed-icon");n&&(n.classList.toggle("fa-square",!t),n.classList.toggle("fa-square-check",t))},s=()=>{document.querySelectorAll(".brivembed-fullscreen").forEach(e=>{const t=e.closest(".embed-container"),n=document.fullscreenElement===t;e.innerHTML=n?'<span class="fa-solid fa-2x fa-compress"></span>':'<span class="fa-solid fa-2x fa-expand"></span>';const r=n?"Exit fullscreen":"Show fullscreen";e.setAttribute("aria-label",r),e.setAttribute("title",r)})},c=e=>{const t=a(e),n=(e=>{if(e.dataset.src)return e.dataset.src;const t=a(e),n=e.dataset.code;return t&&n?t.src({code:n,user:e.dataset.user,tab:e.dataset.tab,editable:e.dataset.editable}):""})(e);if(!n)return;e.querySelector(".brivembed-placeholder")?.remove(),e.classList.remove("brivembed"),e.classList.add("embed-container");const r=((e,t)=>{const n=document.createElement("iframe");return n.src=e,n.title=`Displaying external content hosted by ${t}`,n.loading="lazy",n.setAttribute("allow","accelerometer; encrypted-media; fullscreen; gyroscope; picture-in-picture"),n})(n,t?.label||e.dataset.provider||"");e.appendChild(r),(e=>"1"===e.dataset.fullscreen)(e)&&e.appendChild((e=>{const t=document.createElement("button");return t.type="button",t.className="brivembed-fullscreen",t.addEventListener("click",()=>{document.fullscreenElement===e?document.exitFullscreen?.():e.requestFullscreen?.()}),t})(e)),s()},d=e=>{const n=e.dataset.provider;if(!n)return;(e=>{if(e.querySelector(".brivembed-placeholder"))return;const t=a(e),n=t?.label||e.dataset.provider||"";e.insertAdjacentHTML("afterbegin",`\n <div class="brivembed-placeholder">\n <h3>External content hosted by <span class="brivembed-provider-name-title">${n}</span></h3>\n <p>To respect your privacy, click “Show content” to load it.</p>\n\n <div class="brivembed-actions">\n <button type="button" class="brivembed-load">Show content</button>\n\n <div class="brivembed-remember" role="button" tabindex="0">\n <span aria-hidden="true" class="brivembed-icon fa-regular fa-square fa-lg"></span>\n <span class="brivembed-text">\n Always allow the service\n <span class="brivembed-provider-name-checkbox">${n}</span>\n </span>\n </div>\n </div>\n </div>\n `)})(e);const r=!0===t[n];o(e,r),r&&c(e)};document.addEventListener("fullscreenchange",s),document.querySelectorAll(".brivembed").forEach(d),document.addEventListener("click",e=>{const r=e.target.closest(".brivembed-load"),a=e.target.closest(".brivembed-remember");if(!r&&!a)return;const s=e.target.closest(".brivembed");if(!s)return;const d=s.dataset.provider;return d?a?(t[d]=!t[d],n(),void o(s,!0===t[d])):void(r&&c(s)):void 0}),document.addEventListener("keydown",e=>{if("Enter"!==e.key&&" "!==e.key)return;const r=e.target.closest?.(".brivembed-remember");if(!r)return;const a=r.closest(".brivembed");if(!a)return;e.preventDefault();const s=a.dataset.provider;s&&(t[s]=!t[s],n(),o(a,!0===t[s]))})});