1"use strict";(self.webpackChunknodebb=self.webpackChunknodebb||[]).push([[15794],{29869:w=>{w.exports=function(d,p,f){p.setGlobal("true",!0),p.setGlobal("false",!1);const b=24*60*60*1e3,m={displayMenuItem:x,buildMetaTag:k,buildLinkTag:y,stringify:C,escape:I,stripTags:S,buildCategoryIcon:R,buildCategoryLabel:T,generateCategoryBackground:g,generateChildrenCategories:M,generateTopicClass:P,membershipBtn:L,spawnPrivilegeStates:E,localeToHTML:D,renderTopicImage:z,renderDigestAvatar:A,userAgentIcons:B,buildAvatar:H,increment:U,generateWroteReplied:G,generateRepliedTo:h,generateWrote:$,encodeURIComponent:W,isoTimeToLocaleString:q,shouldHideReplyContainer:N,humanReadableNumber:J,formattedNumber:F,txEscape:K,generatePlaceholderWave:Q,register:V,__escape:v};function v(e){return e}function x(e,t){const n=e.navigation[t];return!(!n||n.route.match("/users")&&e.user&&!e.user.privileges["view:users"]||n.route.match("/tags")&&e.user&&!e.user.privileges["view:tags"]||n.route.match("/groups")&&e.user&&!e.user.privileges["view:groups"])}function k(e){const t=e.name?'name="'+e.name+'" ':"",n=e.property?'property="'+e.property+'" ':"",r=e.content?'content="'+e.content.replace(/\n/g," ")+'" ':"";return"<meta "+t+n+r+`/> 2 `}function y(e){const t=["link","rel","as","type","href","sizes","title","crossorigin"],[n,r,s,i,l,c,o,u]=t.map(a=>e[a]?`${a}="${e[a]}" `:"");return"<link "+n+r+s+i+c+o+l+u+`/> 3 `}function C(e){return JSON.stringify(e).replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/g,""")}function I(e){return d.escapeHTML(e)}function S(e){return d.stripHTMLTags(e)}function R(e,t,n){return e?`<span class="icon d-inline-flex justify-content-center align-items-center align-middle ${n}" style="${g(e)} width:${t}; height: ${t}; font-size: ${parseInt(t,10)/2}px;">${e.icon?`<i class="fa fa-fw ${e.icon}"></i>`:""}</span>`:""}function T(e,t="a",n=""){if(!e)return"";const r=t==="a"?`href="${f}/category/${e.slug}"`:"";return`<${t} ${r} class="badge px-1 text-truncate text-decoration-none ${n}" style="color: ${e.color};background-color: ${e.bgColor};border-color: ${e.bgColor}!important; max-width: 70vw;"> 4 ${e.icon&&e.icon!=="fa-nbb-none"?`<i class="fa fa-fw ${e.icon}"></i>`:""} 5 ${e.name} 6 </${t}>`}function g(e){if(!e)return"";const t=[];return e.bgColor&&(t.push("background-color: "+e.bgColor),t.push(`border-color: ${e.bgColor}!important`)),e.color&&t.push("color: "+e.color),e.backgroundImage&&(t.push("background-image: url("+e.backgroundImage+")"),e.imageClass&&t.push("background-size: "+e.imageClass)),t.join("; ")+";"}function M(e){let t="";return!e||!e.children||!e.children.length||(e.children.forEach(function(n){if(n&&!n.isSection){const r=n.link?n.link:f+"/category/"+n.slug;t+='<span class="category-children-item float-start"><div role="presentation" class="icon float-start" style="'+g(n)+'"><i class="fa fa-fw '+n.icon+'"></i></div><a href="'+r+'"><small>'+n.name+"</small></a></span>"}}),t=t&&'<span class="category-children">'+t+"</span>"),t}function P(e){return["locked","pinned","deleted","unread","scheduled"].filter(n=>!!e[n]).join(" ")}function L(e,t=""){return e.isMember&&e.name!=="administrators"?`<button class="btn btn-danger ${t}" data-action="leave" data-group="${e.displayName}" ${e.disableLeave?" disabled":""}><i class="fa fa-times"></i> [[groups:membership.leave-group]]</button>`:e.isPending&&e.name!=="administrators"?`<button class="btn btn-warning disabled ${t}"><i class="fa fa-clock-o"></i> [[groups:membership.invitation-pending]]</button>`:e.isInvited?`<button class="btn btn-warning" data-action="rejectInvite" data-group="${e.displayName}">[[groups:membership.reject]]</button><button class="btn btn-success" data-action="acceptInvite" data-group="${e.name}"><i class="fa fa-plus"></i> [[groups:membership.accept-invitation]]</button>`:!e.disableJoinRequests&&e.name!=="administrators"?`<button class="btn btn-success ${t}" data-action="join" data-group="${e.displayName}"><i class="fa fa-plus"></i> [[groups:membership.join-group]]</button>`:""}function E(e,t,n,r){const s=[];for(const i in n)n.hasOwnProperty(i)&&s.push({name:i,state:n[i],type:r[i]});return s.map(function(i){const l=["groups:moderate","groups:posts:upvote","groups:posts:downvote","groups:local:login","groups:group:create"],c=["groups:find","groups:read","groups:topics:read","groups:view:users","groups:view:tags","groups:view:groups"],o=["groups:moderate"];let u=["groups:view:users","groups:find","groups:read","groups:topics:read","groups:topics:create","groups:topics:reply","groups:topics:tag","groups:posts:edit","groups:posts:history","groups:posts:delete","groups:posts:upvote","groups:posts:downvote","groups:topics:delete"];e===-1&&(u=u.slice(3));const a=t==="guests"&&(l.includes(i.name)||i.name.startsWith("groups:admin:"))||t==="spiders"&&!c.includes(i.name)||t==="fediverse"&&!u.includes(i.name)||t==="Global Moderators"&&o.includes(i.name);return` 7 <td data-privilege="${i.name}" data-value="${i.state}" data-type="${i.type}"> 8 <div class="form-check text-center"> 9 <input class="form-check-input float-none${a?' d-none"':""}" autocomplete="off" type="checkbox"${i.state?" checked":""}${a?' disabled="disabled" aria-diabled="true"':""} /> 10 </div> 11 </td> 12 `}).join("")}function D(e,t){return e=e||t||"en-GB",e.replace("_","-")}function z(e){return e.thumb?'<img src="'+e.thumb+'" class="img-circle user-img" title="'+e.user.displayname+'" />':'<img component="user/picture" data-uid="'+e.user.uid+'" src="'+e.user.picture+'" class="user-img" title="'+e.user.displayname+'" />'}function A(e){return e.teaser?e.teaser.user.picture?'<img style="vertical-align: middle; width: 32px; height: 32px; border-radius: 50%;" src="'+e.teaser.user.picture+'" title="'+e.teaser.user.username+'" />':'<div style="vertical-align: middle; width: 32px; height: 32px; line-height: 32px; font-size: 16px; background-color: '+e.teaser.user["icon:bgColor"]+'; color: white; text-align: center; display: inline-block; border-radius: 50%;">'+e.teaser.user["icon:text"]+"</div>":e.user.picture?'<img style="vertical-align: middle; width: 32px; height: 32px; border-radius: 50%;" src="'+e.user.picture+'" title="'+e.user.username+'" />':'<div style="vertical-align: middle; width: 32px; height: 32px; line-height: 32px; font-size: 16px; background-color: '+e.user["icon:bgColor"]+'; color: white; text-align: center; display: inline-block; border-radius: 50%;">'+e.user["icon:text"]+"</div>"}function B(e){let t="";switch(e.platform){case"Linux":t+='<i class="fa fa-fw fa-linux"></i>';break;case"Microsoft Windows":t+='<i class="fa fa-fw fa-windows"></i>';break;case"Apple Mac":t+='<i class="fa fa-fw fa-apple"></i>';break;case"Android":t+='<i class="fa fa-fw fa-android"></i>';break;case"iPad":t+='<i class="fa fa-fw fa-tablet"></i>';break;case"iPod":case"iPhone":t+='<i class="fa fa-fw fa-mobile"></i>';break;default:t+='<i class="fa fa-fw fa-question-circle"></i>';break}switch(e.browser){case"Chrome":t+='<i class="fa fa-fw fa-chrome"></i>';break;case"Firefox":t+='<i class="fa fa-fw fa-firefox"></i>';break;case"Safari":t+='<i class="fa fa-fw fa-safari"></i>';break;case"IE":t+='<i class="fa fa-fw fa-internet-explorer"></i>';break;case"Edge":t+='<i class="fa fa-fw fa-edge"></i>';break;default:t+='<i class="fa fa-fw fa-question-circle"></i>';break}return t}
12function H(e,t,n,r,s){e||(e=this),r=r||"";const i=new Map([["title",e.displayname],["data-uid",e.uid],["class",`avatar ${r}${n?" avatar-rounded":""}`]]),l=[`--avatar-size: ${t};`],c=u=>Array.from(u).reduce((a,[X,Y])=>(a+=` ${X}="${Y}"`,a),"");let o="";return e.picture&&(o+=`<img${c(i)} alt="${e.displayname}" loading="lazy" component="${s||"avatar/picture"}" src="${e.picture}" style="${l.join(" ")}" onError="this.remove()" itemprop="image" />`),o+=`<span${c(i)} component="${s||"avatar/icon"}" style="${l.join(" ")} background-color: ${e["icon:bgColor"]}">${e["icon:text"]}</span>`,o}function U(e,t){return String(e+parseInt(t,10))}function G(e,t){return e.toPid?h(e,t):$(e,t)}function h(e,t){const n=e.parent&&e.parent.displayname?e.parent.displayname:"[[global:guest]]";return`[[topic:replied-to-user-${e.timestamp<Date.now()-t*b?"on":"ago"}, ${e.toPid}, ${f}/post/${encodeURIComponent(e.toPid)}, ${n}, ${f}/post/${encodeURIComponent(e.pid)}, ${e.timestampISO}]]`}function $(e,t){return`[[topic:wrote-${e.timestamp<Date.now()-t*b?"on":"ago"}, ${f}/post/${encodeURIComponent(e.pid)}, ${e.timestampISO}]]`}function W(e){return encodeURIComponent(e)}function q(e,t="en-GB"){return new Date(e).toLocaleString([t],{dateStyle:"short",timeStyle:"short"}).replace(/,/g,",")}function N(e){return!!(e.replies.count<=0||e.replies.hasSingleImmediateReply)}function J(e,t=1){return d.makeNumberHumanReadable(e,t)}function F(e){return d.addCommas(e)}function K(e){return String(e).replace(/%/g,"%").replace(/,/g,",")}function Q(e){return e.map(n=>n==="divider"?'<li class="dropdown-divider"></li>':` 13 <li class="dropdown-item placeholder-wave"> 14 <div class="placeholder" style="width: 20px;"></div> 15 <div class="placeholder col-${n}"></div> 16 </li>`).join("")}function V(){Object.keys(m).forEach(function(e){p.registerHelper(e,m[e])})}return m}}}]);
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.