scanfile/server/web/assets/js/rating.min.js

1 line
3.1 KiB
JavaScript

(()=>{typeof window.ratingState>"u"&&(window.ratingState=new WeakMap);(function(){function h(e){if(!e||e.hasAttribute("data-initialized"))return;e.setAttribute("data-initialized","true");let r=window.ratingState.get(e);r&&I(e,r),e.dataset.ratingInitialized="true";let a={value:parseFloat(e.dataset.initialValue)||0,precision:parseFloat(e.dataset.precision)||1,readonly:e.dataset.readonly==="true",name:e.dataset.name||"",onlyInteger:e.dataset.onlyinteger==="true",maxValue:0},d=e.querySelector("[data-rating-input]"),s=Array.from(e.querySelectorAll("[data-rating-item]")),o=a.value,u=0,f={click:L,mouseover:g,mouseleave:x};function p(){let n=0;for(let t of s){let i=parseInt(t.dataset.ratingValue,10);!isNaN(i)&&i>n&&(n=i)}a.maxValue=Math.max(1,n),o=Math.max(0,Math.min(a.maxValue,o)),o=Math.round(o/a.precision)*a.precision,v()}function v(){d&&(d.value=o.toFixed(2))}function c(n){for(let t of s){let i=parseInt(t.dataset.ratingValue,10);if(isNaN(i))continue;let b=t.querySelector("[data-rating-item-foreground]");if(!b)continue;let l=n>0?n:o,M=i<=Math.floor(l),V=!M&&i-1<l&&l<i,N=V?(l-Math.floor(l))*100:0;b.style.width=M?"100%":V?`${N}%`:"0%"}}function S(n){if(a.readonly)return;let t=n;a.onlyInteger?t=Math.round(t):o===t&&t%1===0?t=Math.max(0,t-a.precision):t=Math.round(t/a.precision)*a.precision,o=Math.max(0,Math.min(a.maxValue,t)),u=0,v(),c(0),e.dispatchEvent(new CustomEvent("rating-change",{bubbles:!0,detail:{name:a.name,value:o,maxValue:a.maxValue}})),d&&(d.dispatchEvent(new Event("input",{bubbles:!0})),d.dispatchEvent(new Event("change",{bubbles:!0})))}function g(n){if(a.readonly)return;let t=n.target.closest("[data-rating-item]");t&&(u=parseInt(t.dataset.ratingValue,10),isNaN(u)||c(u))}function x(){a.readonly||(u=0,c(0))}function L(n){if(a.readonly)return;let t=n.target.closest("[data-rating-item]");if(!t)return;let i=parseInt(t.dataset.ratingValue,10);isNaN(i)||S(i)}if(p(),c(0),a.readonly){e.style.cursor="default";for(let n of s)n.style.cursor="default"}else e.addEventListener("click",f.click),e.addEventListener("mouseover",f.mouseover),e.addEventListener("mouseleave",f.mouseleave);let y=e.closest("form");y&&y.addEventListener("reset",()=>{o=a.value,u=0,v(),c(0)});let w=new MutationObserver(()=>{try{e.querySelectorAll("[data-rating-item]").length!==s.length&&(s=Array.from(e.querySelectorAll("[data-rating-item]")),p(),c(u>0?u:0))}catch(n){console.error("Error in rating MutationObserver:",n)}});w.observe(e,{childList:!0,subtree:!0});let A={handlers:f,observer:w,items:s};window.ratingState.set(e,A)}function I(e,r){!e||!r||(!e.dataset.readonly==="true"&&(e.removeEventListener("click",r.handlers.click),e.removeEventListener("mouseover",r.handlers.mouseover),e.removeEventListener("mouseleave",r.handlers.mouseleave)),r.observer&&r.observer.disconnect(),window.ratingState.delete(e),e.removeAttribute("data-rating-initialized"))}function m(e=document){e instanceof Element&&e.matches("[data-rating-component]")&&h(e),e&&typeof e.querySelectorAll=="function"&&e.querySelectorAll("[data-rating-component]:not([data-initialized])").forEach(h)}window.templUI=window.templUI||{},window.templUI.rating={init:m},document.addEventListener("DOMContentLoaded",()=>m())})();})();