https://www.glamour.pl/assets/bundles/publisherlike/js/controllers/like_button_controller-T95J3Ku.js
1import{Controller}from"@hotwired/stimulus";import{getCookie}from"publishercore/cookieTools";import{isScrolledIntoView}from"publishercore/viewportTools";export default class extends Controller{static values={loadUrl:String,entity:String,slug:String,id:String,likeText:String,dislikeText:String,visibilityId:String};connect(){this.loaded=!1,this.boundScrollHandler=this.onScroll.bind(this),this.hasLoadUrlValue&&this.initializeLazyButton()}disconnect(){window.removeEventListener("scroll",this.boundScrollHandler)}toggle(e){const t=e.currentTarget.tagName==="BUTTON"?e.currentTarget:e.target.closest("button");if(!t||!t.dataset.likeUrl)return;this.submitLike(t),t.classList.contains("like")?(t.classList.remove("like"),t.classList.add("liked")):(t.classList.remove("liked"),t.classList.add("like"))}initializeLazyButton(){if(!getCookie("PUBLISHER_USERNAME"))return;if(this.shouldLoad()){this.loadButton();return}window.addEventListener("scroll",this.boundScrollHandler,{passive:!0})}onScroll(){if(this.loaded||!this.shouldLoad())return;this.loadButton()}shouldLoad(){if(!this.hasVisibilityIdValue)return!0;const e=document.getElementById(this.visibilityIdValue);return!e||isScrolledIntoView(e)}loadButton(){if(this.loaded)return;const e={entity:this.entityValue,slug:this.slugValue,id:this.idValue,likeText:this.likeTextValue,dislikeText:this.dislikeTextValue};fetch(this.loadUrlValue,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e)}).then(e=>e.status===404?null:e.json()).then(e=>{if(!e)return;this.element.innerHTML=e,this.loaded=!0,window.removeEventListener("scroll",this.boundScrollHandler)}).catch(()=>{})}submitLike(e){const t={entityId:e.dataset.entityId,entityClass:e.dataset.entityClass,userId:e.dataset.userId},n=e.dataset.btnLikeText,s=e.dataset.btnDislikeText;e.classList.add("publisher-like-is-saving"),e.disabled=!0,fetch(e.dataset.likeUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t)}).then(e=>e.json()).then(t=>{if(!t.success)return;const o=document.getElementById("num-likes"),i=o?parseInt(o.innerHTML,10):NaN;t.type==="like"?(e.textContent=s||t.btnName,e.classList.remove("publisher-single-like"),e.classList.add("publisher-single-dislike"),!Number.isNaN(i)&&o&&(o.innerHTML=String(i+1))):t.type==="dislike"&&(e.textContent=n||t.btnName,e.classList.remove("publisher-single-dislike"),e.classList.remove("publisher-single-liked"),e.classList.add("publisher-single-like"),!Number.isNaN(i)&&o&&(o.innerHTML=String(i-1)))}).catch(()=>{}).finally(()=>{e.classList.remove("publisher-like-is-saving"),e.disabled=!1})}}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.