05-tilda-export-backup/Tilda_ Князь, офицер и светский лев_files/t-previewbox.min.js
2025-10-29 19:50:39 +03:00

1 line
15 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(()=>{"use strict";const e={ru:"com",by:"biz",kz:"pro",cc:"one"}[function(){const e={ru:"com",by:"biz",kz:"pro",cc:"one"};let t="cc";if("undefined"!=typeof window){const n=window.location.origin.split(".").pop()||"";Object.keys(e).includes(n)&&(t=n)}return t}()],t=[`https://app.tildacdn.${e}/tfront/plugins/tooltip/t-tooltip.min.js`,`https://app.tildacdn.${e}/tfront/plugins/tooltip/t-tooltip.min.css`],n={position:"bottom",closeDelay:0,maxWidth:200,zIndex:999999999},o={position:"top",type:"info",closeDelay:0,maxWidth:250,zIndex:999999999};var i=function(e,t,n,o){var s;t[0]=0;for(var r=1;r<t.length;r++){var d=t[r++],a=t[r]?(t[0]|=d?1:2,n[t[r++]]):t[++r];3===d?o[0]=a:4===d?o[1]=Object.assign(o[1]||{},a):5===d?(o[1]=o[1]||{})[t[++r]]=a:6===d?o[1][t[++r]]+=a+"":d?(s=e.apply(a,i(e,a,n,["",null])),o.push(s),a[0]?t[0]|=2:(t[r-2]=0,t[r]=s)):o.push(a)}return o},s=new Map;(function(e){var t=s.get(this);return t||(t=new Map,s.set(this,t)),(t=i(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,o=1,i="",s="",r=[0],d=function(e){1===o&&(e||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?r.push(0,e,i):3===o&&(e||i)?(r.push(3,e,i),o=2):2===o&&"..."===i&&e?r.push(4,e,0):2===o&&i&&!e?r.push(5,0,!0,i):o>=5&&((i||!e&&5===o)&&(r.push(o,0,i,n),o=6),e&&(r.push(o,e,0,n),o=6)),i=""},a=0;a<e.length;a++){a&&(1===o&&d(),d(a));for(var l=0;l<e[a].length;l++)t=e[a][l],1===o?"<"===t?(d(),r=[r],o=3):i+=t:4===o?"--"===i&&">"===t?(o=1,i=""):i=t+i[0]:s?t===s?s="":i+=t:'"'===t||"'"===t?s=t:">"===t?(d(),o=1):o&&("="===t?(o=5,n=i,i=""):"/"===t&&(o<5||">"===e[a][l+1])?(d(),3===o&&(r=r[0]),o=r,(r=r[0]).push(2,0,o),o=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(d(),o=2):i+=t),3===o&&"!--"===i&&(o=4,r=r[0])}return d(),r}(e)),t),arguments,[])).length>1?t:t[0]}).bind((function(e,i){this[0]=3;for(var s=arguments.length,d=new Array(s>2?s-2:0),a=2;a<s;a++)d[a-2]=arguments[a];if("function"==typeof e){const t=i?.bindTo;t&&delete i.bindTo;const n=new e(i).render(),o=n.querySelector("[children-container]")||n;if(o.append(...d.flat()),o.removeAttribute("children-container"),Array.isArray(t)){const[e,o]=t;e&&"object"==typeof e&&["string","number"].includes(typeof o)&&(e[o]=n)}return n}if("string"==typeof e){const s=document.createElement(e);return i&&Object.entries(i).forEach((e=>{let[i,d]=e;if(i.startsWith("on"))Array.isArray(d)?d.forEach((e=>s.addEventListener(i.substring(2).toLowerCase(),e))):"function"==typeof d&&s.addEventListener(i.substring(2).toLowerCase(),d);else if("className"===i&&"string"==typeof d)s.classList.add(...d.split(" "));else if("tooltip"===i&&"string"==typeof d)a=s,l=d,r(t).then((()=>{if(!window.Tooltip)return;const e=new window.Tooltip({...n,target:a,content:{title:l}});a.updateTooltipContent=e.updateContent.bind(e)}));else if("infoTooltip"===i&&d&&"object"==typeof d)!function(e,n){r(t).then((()=>{if(!window.Tooltip)return;const t=new window.Tooltip({...o,target:e,content:n});e.updateTooltipContent=t.updateContent.bind(t)}))}(s,d);else if("bindTo"===i){if(Array.isArray(d)){const[e,t]=d;e&&"object"==typeof e&&["string","number"].includes(typeof t)&&(e[t]=s)}}else"testid"===i||("string"==typeof d||"number"==typeof d?s.setAttribute(i,d.toString()):"boolean"==typeof d&&d?s.setAttribute(i,""):d&&(s[i]=d));var a,l})),s.append(...d.flat()),s}if(e instanceof Element)return e;throw new Error("Неверный тип для создания элемента")}));function r(e){const t=(Array.isArray(e)?e:[e]).map((e=>{const t=e.split("."),n=t.pop()?.toLowerCase(),o=window.ver?"?v="+window.ver:"";return"js"===n||"css"===n?function(e,t){return new Promise(((n,o)=>{const i="style"===t,s=i?"link":"script",r=i?"href":"src";let d;try{const{pathname:t}=new URL(e,window.location.href);d=t}catch(t){d=e}const a=document.querySelector(`${s}[${r}*="${d}"]`);if(a)return"true"===a.getAttribute("data-loading")?(a.addEventListener("load",n),void a.addEventListener("error",o)):n(new Event("load"));const l=document.createElement(s);l.setAttribute(r,e),i&&l.setAttribute("rel","stylesheet"),l.setAttribute("data-loading","true"),l.addEventListener("load",(()=>{l.removeAttribute("data-loading"),n(new Event("load"))})),l.addEventListener("error",(()=>{document.head.removeChild(l),o(new Error(`Failed to load resource: ${e}`))})),document.head.appendChild(l)}))}(e+o,"js"===n?"script":"style"):Promise.reject(new Error("Unknown resource extension. Make sure the resource url ends with .css or .js"))}));return Promise.all(t)}function d(e){const t=e=>{if(!e)return!1;const t=window.getComputedStyle(e),n=["auto","scroll"].includes(t.overflowX),o=["auto","scroll"].includes(t.overflowX),{offsetHeight:i,scrollHeight:s,offsetWidth:r,scrollWidth:d}=e;return d>r&&n||s>i&&o};e.addEventListener("wheel",(n=>{const{deltaX:o,deltaY:i,target:s}=n,r=(n=>{if(!n)return n;let o=n;for(;!t(o)&&(o=o?.parentElement||null,o!==e&&o!==document.documentElement););return o})(s);let d="both";var a;Math.abs(o)>Math.abs(i)?d="horizontal":Math.abs(o)<Math.abs(i)&&(d="vertical"),(["vertical","both"].includes(d)&&(a=r,Boolean(a&&0===a.scrollTop)&&i<0||(e=>Boolean(e&&Math.ceil(e.scrollTop+e.clientHeight)>=e.scrollHeight))(r)&&i>0)||["horizontal","both"].includes(d)&&((e=>Boolean(e&&0===e.scrollLeft))(r)&&o<0||(e=>Boolean(e&&Math.ceil(e.scrollLeft+e.clientWidth)>=e.scrollWidth))(r)&&o>0))&&n.preventDefault()}),{passive:!1})}class a{constructor(e,t){if(!(e instanceof HTMLSelectElement))throw new TypeError("select must be a HTMLSelectElement");t="[object Object]"===Object.prototype.toString.call(t)?t:{},this.config={theme:["light","dark"].includes(t.theme)?t.theme:"light",height:t.height&&!isNaN(t.height)?t.height:40,imageSize:a.getImageSize(t.imageSize),columnsCount:t.columnsCount&&!isNaN(t.columnsCount)?t.columnsCount:2,insertSVG:!!t.insertSVG},this.id=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:4,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const n=new Uint8Array(1);crypto.getRandomValues(n);const o=e+n[0]%(t-e+1),i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",s=i+"0123456789",r=new Uint8Array(o);crypto.getRandomValues(r);let d=i[r[0]%52];for(let e=1;e<o;e++)d+=s[r[e]%62];return d}(),this.select=e,this.disabled=this.select.disabled,this.options=this.getOptions(),this.isDropdownOpened=!1,this.handleContainerClick=this.handleContainerClick.bind(this),this.handleSelectChange=this.handleSelectChange.bind(this),this.handleOptionMouseenter=this.handleOptionMouseenter.bind(this),this.handleOptionMouseleave=this.handleOptionMouseleave.bind(this),this.handleOptionClick=this.handleOptionClick.bind(this),this.handleDocClick=this.handleDocClick.bind(this),this.handleDocKeyDown=this.handleDocKeyDown.bind(this),this.updateDropdownOverflow=this.updateDropdownOverflow.bind(this),this.init()}init(){const{theme:e,height:t,imageSize:n,columnsCount:o}=this.config,i=document.createElement("button");i.classList.add("tprev"),i.setAttribute("type","button"),i.setAttribute("role","combobox"),i.setAttribute("aria-expanded","false"),i.setAttribute("aria-controls",this.id),i.setAttribute("aria-owns",this.id),"dark"===e&&i.classList.add("tprev_dark"),i.style.height=`${t}px`,this.disabled&&i.classList.add("tprev_disabled"),this.select.after(i),i.append(this.select),this.select.style.display="none";const s=document.createElement("div");s.classList.add("tprev__selected-option");const r=this.options.find((e=>e.selected));r&&(s.innerHTML=r.label),i.append(s);const d=document.createElement("div");d.classList.add("tprev-dropdown","tprev-dropdown_hidden"),"dark"===e&&d.classList.add("tprev-dropdown_dark"),d.id=this.id;const a=document.createElement("div");a.classList.add("tprev-dropdown__inner"),a.setAttribute("role","listbox"),a.style.gridTemplateColumns=`repeat(${o}, ${n[0]}px)`,this.createOptionsElements(),a.append(...this.options.map((e=>e.element))),d.append(a);const l=document.createElement("div");l.classList.add("tprev__noaction"),this.container=i,this.selectedOption=s,this.dropdown=d,this.dropdownInner=a,this.noaction=l,this.setHandlers()}getOptions(){return Array.from(this.select.options).map((e=>({value:e.value,img:e.getAttribute("data-img")||"",darkImg:e.getAttribute("data-img-dark")||"",label:e.textContent.replace(/\n/g,"").trim(),disabled:e.disabled,selected:e.selected})))}createOptionsElements(){const{theme:e,imageSize:t,insertSVG:n}=this.config;this.options.forEach((o=>{const i=document.createElement("button");i.type="button",i.classList.add("tprev-dropdown__option"),o.selected&&(i.classList.add("tprev-dropdown__option_selected"),i.ariaSelected=!0),o.disabled&&(i.classList.add("tprev-dropdown__option_disabled"),i.disabled=!0);const s=document.createElement("div");if(s.classList.add("tprev-dropdown__option-image"),s.style.width=`${t[0]}px`,s.style.height=`${t[1]}px`,o.imageElement=s,i.append(s),o.img){const t="dark"===e&&o.darkImg?o.darkImg:o.img,i=t.endsWith(".svg");o.imgURL=t,o.isSVG=i,i&&n||(s.style.backgroundImage=`url('${t}')`)}const r=document.createElement("div");r.classList.add("tprev-dropdown__option-label"),r.innerHTML=o.label,r.style.maxWidth=`${t[0]}px`,i.append(r),o.element=i}))}setHandlers(){this.container.addEventListener("click",this.handleContainerClick),this.select.addEventListener("change",this.handleSelectChange),this.setOptionsHandlers()}setOptionsHandlers(){this.options.forEach((e=>{const{element:t}=e;t.addEventListener("click",this.handleOptionClick),e.disabled||(t.addEventListener("mouseenter",this.handleOptionMouseenter),t.addEventListener("mouseleave",this.handleOptionMouseleave))}))}update(){this.isDropdownOpened&&this.closeDropdown(),this.removeOptionsHandlers(),this.options.forEach((e=>{let{element:t}=e;return t.remove()})),this.options=this.getOptions(),this.createOptionsElements(),this.setOptionsHandlers(),this.dropdownInner.append(...this.options.map((e=>e.element))),this.selectedOption.innerHTML="";const e=this.options.find((e=>e.selected));e&&(this.selectedOption.innerHTML=e.label)}destroy(){this.closeDropdown(),this.container.removeEventListener("click",this.handleContainerClick),this.select.removeEventListener("change",this.handleSelectChange),this.removeOptionsHandlers(),this.container.before(this.select),this.container.remove()}removeOptionsHandlers(){this.options.forEach((e=>{let{element:t}=e;t.removeEventListener("click",this.handleOptionClick),t.removeEventListener("mouseenter",this.handleOptionMouseenter),t.removeEventListener("mouseleave",this.handleOptionMouseleave)}))}handleContainerClick(){this.isDropdownOpened?this.closeDropdown():this.openDropdown()}openDropdown(){if(this.disabled||this.isDropdownOpened||!this.options.length)return;document.addEventListener("click",this.handleDocClick),document.addEventListener("keydown",this.handleDocKeyDown,{capture:!0,passive:!1}),this.dropdownInner.addEventListener("scroll",this.updateDropdownOverflow);const{top:e,right:t}=this.container.getBoundingClientRect(),n=t+10,o=e-10;this.dropdown.style.setProperty("--pos-x",`${n}px`),this.dropdown.style.setProperty("--pos-y",`${o}px`),document.body.append(this.dropdown),document.body.append(this.noaction),this.isDropdownOpened=!0,this.container.setAttribute("aria-expanded","true"),this.container.classList.add("tprev_active");const i=this.options.find((e=>e.selected));i&&i.element.scrollIntoView({behavior:"smooth",inline:"start",block:"center"}),this.updateDropdownOverflow(),this.dropdown.classList.remove("tprev-dropdown_hidden"),d(this.dropdown),this.config.insertSVG&&this.options.forEach((e=>{const{imgURL:t,isSVG:n}=e;t&&n&&this.loadSVG(t,e)}))}closeDropdown(){this.dropdown.classList.add("tprev-dropdown_hidden"),this.dropdown.addEventListener("transitionend",(()=>{document.removeEventListener("click",this.handleDocClick),document.removeEventListener("keydown",this.handleDocKeyDown,{capture:!0,passive:!1}),this.dropdownInner.removeEventListener("scroll",this.updateDropdownOverflow),this.dropdown.remove(),this.noaction.remove(),this.isDropdownOpened=!1,this.container.focus(),this.container.setAttribute("aria-expanded","false"),this.container.classList.remove("tprev_active")}),{once:!0})}updateDropdownOverflow(){if(!this.isDropdownOpened)return;this.dropdown.classList.remove("tprev-dropdown_scroll-start","tprev-dropdown_scroll-end");const{scrollTop:e,scrollLeft:t,offsetHeight:n,offsetWidth:o,scrollHeight:i,scrollWidth:s}=this.dropdownInner,r=Math.abs(e-(i-n))<1||i===n,d=Math.abs(t-(s-o))<1||s===o;(s>o||i>o)&&(this.dropdown.classList.toggle("tprev-dropdown_scroll-start",t||e),this.dropdown.classList.toggle("tprev-dropdown_scroll-end",!d||!r))}handleSelectChange(){const e=this.select.value,t=this.options.find((t=>t.value===e));if(!t)return;const n=this.options.find((e=>e.selected));n&&(n.selected=!1,n.element.classList.remove("tprev-dropdown__option_selected"),n.element.ariaSelected=!1),t.selected=!0,t.element.classList.add("tprev-dropdown__option_selected"),t.element.ariaSelected=!0,this.selectedOption.innerHTML=t.label}handleOptionClick(e){const t=e.currentTarget,n=this.options.find((e=>e.element===t));n.disabled||(this.select.value=n.value,window.setTimeout((()=>{this.select.dispatchEvent(new CustomEvent("interaction")),n.selected||this.select.dispatchEvent(new Event("change"))}),100),this.closeDropdown())}handleOptionMouseenter(e){const t=e.currentTarget,n=this.options.find((e=>e.element===t));n&&!n.disabled&&t.focus()}handleOptionMouseleave(e){const t=e.currentTarget,n=this.options.find((e=>e.element===t));n&&!n.disabled&&t.blur()}handleDocClick(e){this.container.contains(e.target)||this.dropdown.contains(e.target)||this.closeDropdown()}handleDocKeyDown(e){if("Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.closeDropdown()),["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","PageUp","PageDown","Tab"].includes(e.key)&&(e.preventDefault(),e.stopPropagation()),["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.key)){const{columnsCount:t}=this.config,n=this.options.findIndex((e=>e.element===document.activeElement)),o=n%t,i=["ArrowUp","ArrowDown"].includes(e.key)?t:1;if("ArrowLeft"===e.key&&!o||"ArrowRight"===e.key&&o===t-1)return;const s=n+(["ArrowUp","ArrowLeft"].includes(e.key)?-i:i),r=this.options.find(((e,t)=>!e.disabled&&t===s));r&&r.element.focus()}const t=e.key.toLowerCase();if(/^[a-zа-я]$/.test(t)&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){e.preventDefault(),e.stopPropagation();const n=this.options.find((e=>e.label.toLowerCase().startsWith(t)));n&&n.element.focus()}}loadSVG(e,t){const{imageSize:n}=this.config,{imageElement:o,fetchedSVGPromise:i}=t;i||(t.fetchedSVGPromise=fetch(e,{method:"GET",headers:{Accept:"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"}}).then((e=>e.text())).then((e=>{const t=(new DOMParser).parseFromString(e,"image/svg+xml").firstElementChild;if(!(t instanceof SVGElement))throw new Error;return t.classList.add("tprev-dropdown__option-image"),t.setAttribute("width",n[0]),t.setAttribute("height",n[1]),t.setAttribute("preserveAspectRatio","xMidYMid meet"),o.replaceWith(t),t})).catch((()=>{delete t.fetchedSVGPromise})))}static getImageSize(e){const t=Array.isArray(e)?e:[e];return t.length||t.push(180,120),1===t.length&&t.push(t[0]),t.splice(2,t.length),t.every((e=>e&&!isNaN(e)))?t:[180,120]}}window.TPreviewbox=a})();