PageSourceSearch

https://vnbit.org/js/siropu/shoutbox/core.min.js?_v=83ed1fb9

js vnbit.org collected 2026-09-24 09:04:17 UTC 17,555 bytes, 1 lines download raw bytes

1((window,document)=>{"use strict";XF.SiropuShoutbox=XF.Element.newHandler({options:{userId:0,lastId:0,refreshInterval:0,refreshTimeout:600,lastActive:0,loadMore:!0,reverse:!1,collapsed:!1,activeUsers:!1,timeout:1e3,sound:"on",tag:!1,realTime:!1,actionMenu:"",perms:{},multiLine:"no"},audio:"",refreshSet:null,botPollSet:null,botPollStopSet:null,tabRepairSet:null,init(){this.options.realTime&&(this.options.refreshInterval=1e3),this.options.collapsed||this.startRefreshInterval(),"on"==this.options.sound&&this.loadAudio(),this.options.activeUsers&&this.initActiveUsers(),this.initTagUsers();const t=this.target,container=t.querySelector(".siropuShoutboxShouts");XF.on(t.querySelector("form"),"submit",this.submit.bind(this)),"no"!=this.options.multiLine&&XF.on(t.querySelector(".siropuShoutboxInput"),"keyup",this.submit.bind(this)),XF.on(t.querySelector('a[data-toggle="popup"]'),"click",this.popup.bind(this)),XF.on(t.querySelector('a[data-toggle="direction"]'),"click",this.toggleDirection.bind(this)),XF.on(t.querySelector('a[data-toggle="visibility"]'),"click",this.toggleVisibility.bind(this)),XF.on(t.querySelector('a[data-toggle="sound"]'),"click",this.toggleSound.bind(this)),XF.on(t.querySelector(".siropuShoutboxSwitchRoomsMenu a"),"click",this.switchRooms.bind(this)),XF.on(container,"scroll",()=>{var shout,scrollDiff=container.scrollHeight-container.clientHeight,scrollTop=parseInt(container.scrollTop),isNotice=this.target.querySelector(".siropuShoutboxLoadingMoreShouts");if(container.dataset.autoscroll=0,((scrollTop==scrollDiff||scrollTop+1==scrollDiff||scrollTop-1==scrollDiff)&&this.options.reverse||0==scrollTop&&!this.options.reverse)&&(container.dataset.autoscroll=1),this.options.loadMore&&!isNotice&&(!this.options.reverse&&(scrollTop==scrollDiff||scrollTop+1==scrollDiff||scrollTop-1==scrollDiff)||this.options.reverse&&0==scrollTop)){shout=this.options.reverse?container.querySelector("li[data-id]:first-child"):container.querySelector("li[data-id]:last-child");let notice=document.createElement("div");notice.classList.add("siropuShoutboxLoadingMoreShouts"),this.getIcon("light","fa-hourglass").then(icon=>{notice.innerHTML=icon+" "+XF.phrase("siropu_shoutbox_loading_more_shouts")}),this.options.reverse?(notice.classList.add("siropuShoutboxReverse"),container.parentNode.insertBefore(notice,container)):container.insertAdjacentElement("afterend",notice),XF.ajax("GET",XF.canonicalizeUrl("index.php?shoutbox/load-more"),{last_id:shout.dataset.id},data=>{data.html&&data.html.content?XF.setupHtmlInsert(data.html,html=>{this.insertShouts(html,!this.options.reverse),this.options.reverse&&shout.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"}),this.initTagUsers()}):this.options.loadMore=!1;const isNotice=this.target.querySelector(".siropuShoutboxLoadingMoreShouts");isNotice&&XF.Animate.fadeOut(isNotice,{speed:XF.config.speed.fast,complete(){isNotice.remove()}})})}}),window.addEventListener("resize",()=>{this.adjustContentHeight()}),document.addEventListener("visibilitychange",()=>{document.hidden||this.repairAfterTabReturn()}),window.addEventListener("pageshow",()=>{this.repairAfterTabReturn()}),window.addEventListener("focus",()=>{this.repairAfterTabReturn()}),container.addEventListener("load",event=>{event.target.classList.contains("bbImage")&&this.doAutoScroll()}),setTimeout(()=>{this.adjustContentHeight()},500),document.addEventListener("click",event=>{event.target.classList.contains("siropuShoutboxAiBotName")&&(event=t.querySelector('input[name="shout"]'))&&(event.value="/ai ",event.focus())}),this.autoScroll()},submit(e){if(e.preventDefault(),void 0!==e.which){if(13!=e.which)return;if("enter"==this.options.multiLine||e.shiftKey&&"shift_enter"==this.options.multiLine)return}const input=document.querySelector(".siropuShoutboxInput");e=this.normalizeUrlSchemes(input.value.trim());const isBotRequest=/^\/(?:ai|image|img)(?:\s|$)/i.test(e);if(!e)return input.focus();let placeholder=XF.phrase("siropu_shoutbox_please_wait");1e3<this.options.timeout&&(placeholder=XF.phrase("siropu_shoutbox_please_wait_x_seconds")),input.value="",input.placeholder=placeholder,input.disabled=!0,this.stopRefreshInterval(),XF.ajax("POST",XF.canonicalizeUrl("index.php?shoutbox/submit"),{last_id:this.options.lastId,shout:e},data=>{data.linkRestrictionHtml&&XF.flashMessage(data.linkRestrictionHtml,5e3),this.update(data),this.startRefreshInterval(),isBotRequest&&this.startBotPolling(),this.options.lastActive=data.time;var container=this.target.querySelector(".siropuShoutboxShouts");data.prune&&container.querySelectorAll("li[data-id]").forEach(li=>{li.dataset.id!=data.lastId&&li.remove()})},{global:!1}),setTimeout(()=>{input.disabled=!1,input.placeholder=XF.phrase("siropu_shoutbox_placeholder"),input.focus()},this.options.timeout)},normalizeUrlSchemes(message){return message.replace(/\b(?:https?|ftp):\/\//gi,scheme=>scheme.toLowerCase())},repairAfterTabReturn(){clearTimeout(this.tabRepairSet),this.tabRepairSet=setTimeout(()=>{if(document.hidden||!this.target||!this.target.isConnected)return;const container=this.target.querySelector(".siropuShoutboxShouts");if(!container)return;const direct=[...container.querySelectorAll(":scope > li[data-id]")],ids=direct.map(li=>parseInt(li.dataset.id,10)).filter(Number.isFinite);if(!ids.length){this.adjustContentHeight();return}const oldest=Math.max(0,Math.min(...ids)-1);XF.ajax("GET",XF.canonicalizeUrl("index.php?shoutbox/refresh"),{last_id:oldest},data=>{if(data.html&&data.html.content)XF.setupHtmlInsert(data.html,html=>{const nodes=html.classList&&html.classList.contains("js-createdContainer")?[...html.childNodes]:[html];container.replaceChildren(...nodes),XF.activate(container),this.initTagUsers(),data.lastId&&this.setLastId(data.lastId),requestAnimationFrame(()=>{this.adjustContentHeight(),this.autoScroll()})})},{skipDefault:!0,skipDefaultSuccess:!0,global:!1})},120)},update(data,soundOff){data.html&&data.html.content&&XF.setupHtmlInsert(data.html,html=>{this.insertShouts(html,this.options.reverse),this.autoScroll(),this.initTagUsers(),void 0===soundOff&&this.playSound()}),data.lastId&&this.setLastId(data.lastId),this.options.refreshTimeout&&data.time-this.options.lastActive>=this.options.refreshTimeout&&this.stopRefreshInterval()},insertShouts(shouts,reverse){var container=this.target.querySelector(".siropuShoutboxShouts"),placeholder=container.querySelector("li:not([data-id])");
1placeholder&&placeholder.remove(),reverse?shouts.classList.contains("js-createdContainer")?container.append(...shouts.childNodes):container.append(shouts):shouts.classList.contains("js-createdContainer")?container.prepend(...shouts.childNodes):container.prepend(shouts),XF.activate(container)},refresh(soundOff,forceRefresh){if(this.options.realTime&&!forceRefresh){let data={html:{content:""}};XF.ajax("GET",XF.canonicalizeUrl("data/siropu/shoutbox/shouts.json"),{},shouts=>{var shoutsContainer=this.target.querySelector(".siropuShoutboxShouts");for(const id in shouts){var currentShout,shout=XF.createElementFromString(shouts[id]);shout.dataset.edited?(currentShout=shoutsContainer.querySelector('li[data-id="'+id+'"]')).dataset.edited&&currentShout.dataset.edited===shout.dataset.edited||(currentShout.style.display="none",shout.style.display="none",currentShout.parentNode.replaceChild(this.prepareRealTimeShout(id,shout),currentShout),shout.style.display="block"):void 0===shout.innerHTML?(currentShout=shoutsContainer.querySelector('li[data-id="'+id+'"]')).parentNode.removeChild(currentShout):id>this.options.lastId&&(shout.dataset.prune&&(shoutsContainer.innerHTML=""),data.html.content=this.prepareRealTimeShout(id,shout).outerHTML,data.lastId=id,this.update(data,soundOff))}},{skipDefault:!0,skipError:!0,global:!1})}else XF.ajax("GET",XF.canonicalizeUrl("index.php?shoutbox/refresh"),{last_id:this.options.lastId},data=>{this.update(data,soundOff)},{skipDefault:!0,skipDefaultSuccess:!0,global:!1})},startBotPolling(){this.stopBotPolling(),this.botPollSet=setInterval(()=>{this.refresh(!0,!0)},1500),this.botPollStopSet=setTimeout(()=>{this.stopBotPolling()},12e4)},stopBotPolling(){clearInterval(this.botPollSet),clearTimeout(this.botPollStopSet),this.botPollSet=null,this.botPollStopSet=null},startRefreshInterval(){this.stopRefreshInterval(),this.options.refreshInterval&&(this.refreshSet=setInterval(this.refresh.bind(this),this.options.refreshInterval))},stopRefreshInterval(){clearInterval(this.refreshSet),this.refreshSet=null},setLastId(id){this.options.lastId=id,this.target.dataset.lastId=id},loadAudio(){this.audio=new Audio(XF.config.url.basePath+"styles/default/siropu/shoutbox/new.mp3")},soundOn(){this.target.dataset.sound="on",this.options.sound="on",this.audio||this.loadAudio()},soundOff(){this.target.dataset.sound="off",this.options.sound="off"},playSound(){"on"==this.options.sound&&this.audio.play()},adjustContentHeight(){var shoutbox=this.target,content=shoutbox.querySelector(".siropuShoutboxShouts"),windowHeight=window.innerHeight,shoutbox=shoutbox.offsetHeight,contentHeight=content.offsetHeight,windowHeight=windowHeight-shoutbox;document.getElementById("siropuShoutboxFullPage")&&(content.style.height=contentHeight+windowHeight+"px")},autoScroll(){var container=this.target.querySelector(".siropuShoutboxShouts");1==container.dataset.autoscroll&&this.doAutoScroll(container)},doAutoScroll(container){this.options.reverse?container.scrollTop=1e7:container.scrollTop=0},initActiveUsers(){setInterval(()=>{XF.ajax("GET",XF.canonicalizeUrl("index.php?shoutbox/active-users"),{},data=>{data.html&&XF.setupHtmlInsert(data.html,html=>{this.target.querySelector(".siropuShoutboxActiveUsers").innerHTML=html.innerHTML})},{skipDefault:!0,skipDefaultSuccess:!0,global:!1})},12500)},prepareRealTimeShout(id,shout){var username=shout.querySelector(".username"),shoutUserId=username.dataset.userId,userId=this.options.userId,username=(this.options.tag&&shoutUserId!=userId&&(username.insertAdjacentHTML("beforebegin",'<a role="button" class="siropuShoutboxTag" title="'+XF.phrase("siropu_shoutbox_tag_user")+'">@</a> '),username=shout.querySelector('div.username[data-user-id="'+userId+'"]'))&&username.dataset.userId!==shoutUserId&&shout.classList.add("siropuShoutboxTagged"),this.options.perms);return(username.editAny||username.deleteAny||username.ban||shoutUserId==userId&&(username.editOwn||username.deleteOwn))&&shout.insertAdjacentHTML("beforeend",' <a role="button" class="siropuShoutboxActions" data-xf-click="menu" role="button" tabindex="0" aria-expanded="false" aria-haspopup="true">'+XF.Icon.getIcon("default","fa-chevron-circle-down")+'</a><div class="menu" data-menu="menu" aria-hidden="true" data-href="'+this.options.actionMenu.replace(0,id)+'" data-load-target=".js-shoutboxActionMenuBody"><div class="menu-content js-shoutboxActionMenuBody"><div class="menu-row">'+XF.phrase("loading")+"</div></div></div>"),shout},switchRooms(e){e.preventDefault(),delete this.options,clearInterval(this.refreshSet),XF.ajax("GET",e.currentTarget.getAttribute("href"),{},data=>{XF.trigger(this.target.querySelector(".siropuShoutboxSwitchRoomsTrigger"),"click"),data.message&&XF.flashMessage(data.message,2e3),XF.setupHtmlInsert(data.html,html=>{this.target.replaceWith(html)})})},toggleDirection(e){e.preventDefault();const button=e.currentTarget;var e=this.options.reverse,newState=e?0:1,form=this.target.querySelector("form"),shouts=this.target.querySelector(".siropuShoutboxShouts");XF.Cookie.set("siropuShoutboxReverse",newState,this.cookieExpiry()),e?(form.after(shouts),this.getIcon("light","fa-arrow-down").then(icon=>{button.innerHTML=icon})):(form.before(shouts),this.getIcon("light","fa-arrow-up").then(icon=>{button.innerHTML=icon})),shouts.innerHTML="",form.classList.toggle("siropuShoutboxReverse"),this.target.setAttribute("data-reverse",newState),this.options.reverse=newState,this.setLastId(0),this.refresh(!1,!0)},toggleVisibility(e){e.preventDefault();const button=e.currentTarget;
1var e=this.options.collapsed,newState=e?0:1,shouts=this.target.querySelector(".siropuShoutboxShouts"),container=shouts.parentNode;XF.Cookie.set("siropuShoutboxCollapsed",newState,this.cookieExpiry()),e?(shouts.querySelectorAll("li:not([data-id])").length&&this.refresh(!1,!0),this.startRefreshInterval(),this.getIcon("light","fa-minus").then(icon=>{button.innerHTML=icon}),XF.Animate.slideDown(container,{speed:XF.config.speed.normal,complete:XF.layoutChange})):(this.stopRefreshInterval(),this.getIcon("light","fa-plus").then(icon=>{button.innerHTML=icon}),XF.Animate.slideUp(container,{speed:XF.config.speed.normal,complete:XF.layoutChange})),this.options.collapsed=newState},toggleSound(e){e.preventDefault();const button=e.currentTarget;e=this.options.sound;XF.Cookie.set("siropuShoutboxSound","on"==e?0:1,this.cookieExpiry()),"off"==e?(this.soundOn(),this.getIcon("light","fa-volume-up").then(icon=>{button.innerHTML=icon})):(this.soundOff(),this.getIcon("light","fa-volume-off").then(icon=>{button.innerHTML=icon}))},initTagUsers(){this.target.querySelectorAll(".siropuShoutboxTag").forEach(tag=>{XF.on(tag,"click",this.tagUser.bind(this))})},tagUser(e){var input=this.target.querySelector('input[name="shout"]'),inputVal=input.value,e="@"+e.currentTarget.nextElementSibling.textContent;if(inputVal.match(e))return input.focus();input.value=inputVal+e+", ",input.focus()},popup(e){e.preventDefault();let popup;void 0===popup||popup.closed?popup=window.open(e.currentTarget.getAttribute("href"),"siropuShoutboxPopup","width=800,height=500"):popup.focus()},cookieExpiry(){return new Date((new Date).setFullYear((new Date).getFullYear()+1))},async getIcon(variant,name){return XF.Icon.getInlineIcon(variant,name)}}),XF.SiropuShoutboxEdit=XF.Element.newHandler({options:{},init(){XF.on(this.target,"ajax-submit:response",this.ajaxResponse.bind(this))},ajaxResponse(e){var oldShout=document.querySelector('.siropuShoutboxShouts > li[data-id="'+e.data.shout_id+'"]');oldShout.parentNode.replaceChild(XF.createElementFromString(e.data.shout),oldShout)}}),XF.SiropuShoutboxDelete=XF.Element.newHandler({options:{},init(){XF.on(this.target,"ajax-submit:response",this.ajaxResponse.bind(this))},ajaxResponse(e){document.querySelector('.siropuShoutboxShouts > li[data-id="'+e.data.shout_id+'"]').remove()}}),XF.SiropuShoutboxSmiliesEmoji=XF.Element.newHandler({options:{},menu:null,timer:null,init(){const menu=this.target;document.querySelector('input[name="shout"]');let loaded=!1;this.menu=menu,XF.on(menu,"menu:complete",()=>{const menuScroller=menu.querySelector(".menu-scroller");loaded||(loaded=!0,XF.on(menuScroller,"scroll",()=>this.loadVisibleImages(menuScroller)),XF.on(menu.querySelector(".js-emojiSearch"),"input",this.performSearch.bind(this)),menu.querySelectorAll(".js-emoji").forEach(emoji=>{XF.on(emoji,"click",this.insertEmoji.bind(this))}),this.loadVisibleImages(menuScroller))}),XF.on(menu,"menu:closed",()=>{menu.remove()})},loadVisibleImages(rowOrEvent,assumeVisible){let row=rowOrEvent;if(rowOrEvent instanceof Event&&(row=rowOrEvent.target),assumeVisible||row.offsetParent){const visibleRect=row.getBoundingClientRect(),visibleBottom=visibleRect.bottom+100;row.childNodes.forEach(child=>{if(child.nodeType===Node.ELEMENT_NODE){var childRect=child.getBoundingClientRect();if(!(childRect.bottom<visibleRect.top))return!(childRect.top>visibleBottom)&&void child.querySelectorAll("span.smilie--lazyLoad").forEach(toLoad=>{toLoad.getBoundingClientRect().top<=visibleBottom&&this.lazyLoadEmoji(toLoad)})}})}},lazyLoadEmoji(toLoad){const image=XF.createElement("img",{className:toLoad.getAttribute("class").replace(/(\s|^)smilie--lazyLoad(\s|$)/," "),alt:toLoad.getAttribute("data-alt"),title:toLoad.getAttribute("title"),src:toLoad.getAttribute("data-src"),dataset:{shortname:toLoad.dataset.shortname}});var replace=()=>{window.requestAnimationFrame(()=>{toLoad.outerHTML=image.outerHTML})};image.complete?XF.on(image,"load",replace):replace()},performSearch(e){const input=e.currentTarget,fullList=this.menu.querySelector(".js-emojiFullList"),searchResults=this.menu.querySelector(".js-emojiSearchResults");clearTimeout(this.timer),this.timer=setTimeout(()=>{var url,value=input.value;!value||value.length<2?(XF.display(searchResults,"none"),XF.display(fullList),this.loadVisibleImages(fullList)):(url=XF.canonicalizeUrl("index.php?editor/smilies-emoji/search"),XF.ajax("GET",url,{q:value},data=>{data.html&&XF.setupHtmlInsert(data.html,html=>{XF.display(fullList,"none"),searchResults.innerHTML=html.outerHTML,XF.display(searchResults),searchResults.querySelectorAll(".js-emoji").forEach(emoji=>{XF.on(emoji,"click",this.insertEmoji.bind(this))})})}))},300)},insertEmoji(e){const target=e.currentTarget;var e=target.innerHTML,input=document.querySelector(".siropuShoutboxInput");if(!target.classList.contains("smilie--lazyLoad")){if(input.value+=" "+target.querySelector("img").getAttribute("alt"),this.menu){const insertRow=this.menu.querySelector(".js-emojiInsertedRow");insertRow.querySelector(".js-emojiInsert").innerHTML=e,XF.Transition.addClassTransitioned(insertRow,"is-active"),clearTimeout(void 0),setTimeout(()=>XF.Transition.removeClassTransitioned(insertRow,"is-active"),1500)}clearTimeout(void 0),setTimeout(()=>XF.logRecentEmojiUsage(target.dataset.shortname),1500)}}}),XF.Element.register("siropu-shoutbox","XF.SiropuShoutbox"),XF.Element.register("siropu-shoutbox-smilies-emoji","XF.SiropuShoutboxSmiliesEmoji"),XF.Element.register("siropu-shoutbox-edit-shout","XF.SiropuShoutboxEdit"),XF.Element.register("siropu-shoutbox-delete-shout","XF.SiropuShoutboxDelete")})(window,document);

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.