PluginProbe
GutSlider – All in One Slider and Carousel Blocks for Gutenberg / 3.2.0
GutSlider – All in One Slider and Carousel Blocks for Gutenberg v3.2.0
3.2.0 3.1.0 3.0.0 2.13.2 2.13.1 2.13.0 trunk 1.0.0 2.1.0 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.1 2.5.3 2.5.4 2.5.5 All 57 releases
slider-blocks / build / blocks / marquee / frontend.js

frontend.js in GutSlider – All in One Slider and Carousel Blocks for Gutenberg 3.2.0, at build/blocks/marquee/frontend.js

1 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (()=>{"use strict";const e=()=>document.querySelectorAll(".wp-block-gutsliders-marquee[data-marquee]").forEach((e=>function(e){const t=e.ownerDocument.defaultView||window,s=[...e.querySelectorAll(":scope > .marquee-container")];if(!s.length)return()=>{};const r="vertical"===e.dataset.marquee,a=Number(e.dataset.speedPx)||0,n=e.dataset.hover||"",o="1"===e.dataset.drag,i="linked"===e.dataset.scroll,l="1"===e.dataset.reverseScroll,c="1"===e.dataset.scrollBoost,u=t.matchMedia?.("(prefers-reduced-motion: reduce)").matches,d=[],f=(e,t,s,r)=>{e.addEventListener(t,s,r),d.push((()=>e.removeEventListener(t,s,r)))},m=s.map((e=>{const t=e.querySelector(":scope > .marquee-content"),s=e.dataset.direction||(r?"up":"left"),a=parseFloat(e.style.getPropertyValue("--animation-duration"))||30;return{el:e,first:t,sign:["right","down"].includes(s)?1:-1,legacy:a,size:0,offset:0}})),p=()=>{const t=r?e.clientHeight:e.clientWidth;m.forEach((e=>{if(!e.first)return;const s=r?e.first.offsetHeight:e.first.offsetWidth;if(!s)return;const n=Math.max(2,Math.ceil(t/s)+1);for(let t=e.el.querySelectorAll(":scope > .marquee-content").length;t<n;t++){const t=e.first.cloneNode(!0);t.classList.add("is-copy"),t.setAttribute("aria-hidden","true"),t.setAttribute("inert",""),t.querySelectorAll("[id]").forEach((e=>e.removeAttribute("id"))),e.el.appendChild(t)}e.offset=e.size?e.offset/e.size*s:e.sign>0?-s:0,e.size=s,e.speed=a>0?a:s/e.legacy,e.el.style.setProperty("--marquee-shift",`-${s}px`)}))};if(p(),u)return()=>{};if(e.classList.add("is-js"),t.ResizeObserver){const s=new t.ResizeObserver((()=>t.requestAnimationFrame(p)));s.observe(e),m.forEach((e=>e.first&&s.observe(e.first))),d.push((()=>s.disconnect()))}let h=!1,g=!1,b=!1,v=!1,q=1,y=0,A=1;if(n&&(f(e,"pointerenter",(e=>{"mouse"===e.pointerType&&(h=!0)})),f(e,"pointerleave",(()=>{h=!1}))),f(e,"focusin",(()=>{g=!0})),f(e,"focusout",(t=>{g=e.contains(t.relatedTarget)})),e.dataset.labelPause&&!e.querySelector(":scope > .marquee-pause")){const t=e.ownerDocument.createElement("button");t.type="button",t.className="marquee-pause",t.innerHTML='<span aria-hidden="true"></span>';const s=()=>{t.setAttribute("aria-pressed",String(b)),t.setAttribute("aria-label",b?e.dataset.labelPlay:e.dataset.labelPause),e.classList.toggle("is-paused",b)};f(t,"click",(()=>{b=!b,s()})),s(),e.appendChild(t),d.push((()=>t.remove()))}let w=t.scrollY,E=t.performance.now();if((i||l||c)&&f(t,"scroll",(()=>{const e=t.performance.now(),s=t.scrollY-w,r=Math.max(16,e-E)/1e3;i&&m.forEach((e=>{e.offset+=e.sign*s*.5})),l&&s&&(q=s<0?-1:1),c&&(y=Math.min(4,y+Math.abs(s)/r/1500)),w=t.scrollY,E=e}),{passive:!0}),o){let s=null,a=0;f(e,"pointerdown",(t=>{0!==t.button||t.target.closest(".marquee-pause")||(s=r?t.clientY:t.clientX,a=0,v=!0,e.classList.add("is-dragging"))})),f(t,"pointermove",(e=>{if(null===s)return;const t=r?e.clientY:e.clientX,n=t-s;s=t,a+=Math.abs(n),m.forEach((e=>{e.offset+=n}))}));const n=()=>{s=null,v=!1,e.classList.remove("is-dragging")};f(t,"pointerup",n),f(t,"pointercancel",n),f(e,"click",(e=>{a>6&&(e.preventDefault(),e.stopPropagation(),a=0)}),!0)}let M=null,L=0,z=!0;const S=e=>{const s=L?Math.min(.05,(e-L)/1e3):0;L=e,A+=((()=>{if(b||g||v)return 0;let e=1;return h&&(e="slow"===n?.25:0),e*q*(1+y)})()-A)*Math.min(1,5*s),y=Math.max(0,y-2*s),m.forEach((e=>{e.size&&(i||(e.offset+=e.sign*e.speed*A*s),e.offset=(e.offset%e.size-e.size)%e.size,e.el.style.transform=r?`translate3d(0, ${e.offset}px, 0)`:`translate3d(${e.offset}px, 0, 0)`)})),M=z?t.requestAnimationFrame(S):null};if(t.IntersectionObserver){const s=new t.IntersectionObserver((([e])=>{z=e.isIntersecting,z&&!M&&(L=0,M=t.requestAnimationFrame(S))}));s.observe(e),d.push((()=>s.disconnect()))}return M=t.requestAnimationFrame(S),()=>{M&&t.cancelAnimationFrame(M),d.forEach((e=>e())),e.classList.remove("is-js","is-paused","is-dragging"),m.forEach((e=>{e.el.style.transform=""}))}}(e)));"loading"===document.readyState?document.addEventListener("DOMContentLoaded",e):e()})();