1"use strict";(self.webpackChunknodebb=self.webpackChunknodebb||[]).push([[1091,34271,49897,57843,99127],{98569(x,m,o){o.r(m),o.d(m,{init:()=>p});var i=o(70106),P=o(81335),_=o.n(P),O=o(33530),R=o.n(O),g=o(17459),y=o.n(g),v=o(49897),E=o(91749),b=o.n(E);i.t1.register(i.ZT,i.PP,i.kc,i.No,i.FN,i.m_,i.dN);let u=null,D=!1;function p({set:a,dataset:d}){const n=document.getElementById("analytics-traffic"),l=n.getContext("2d"),r=utils.getHoursArray();D=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),D&&(i.t1.defaults.plugins.tooltip.enabled=!1),t({set:a});const h=g.Translator.create();return new Promise(s=>{h.translateKey(`admin/menu:${ajaxify.data.template.name.replace("admin/","")}`,[]).then(c=>{const f={labels:r,datasets:[{label:c,fill:!0,tension:.25,backgroundColor:"rgba(151,187,205,0.2)",borderColor:"rgba(151,187,205,1)",pointBackgroundColor:"rgba(151,187,205,1)",pointHoverBackgroundColor:"rgba(151,187,205,1)",pointBorderColor:"#fff",pointHoverBorderColor:"rgba(151,187,205,1)",data:d||[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]};n.width=$(n).parent().width(),f.datasets[0].yAxisID="left-y-axis",u=new i.t1(l,{type:"line",data:f,options:{responsive:!0,maintainAspectRatio:!1,scales:{"left-y-axis":{type:"linear",position:"left",beginAtZero:!0,title:{display:!1,text:c}}},plugins:{legend:{display:!1,position:"bottom"}},interaction:{intersect:!1,mode:"index"}}}),d?s(u):e(a).then(s)})})}function t({set:a}){$('[data-action="updateGraph"]').on("change",function(){let n=$(this).val();if(n==="custom"){d($(this));return}const l=n==="1"?"hours":"days";let r=new Date;n!=="1"&&r.setHours(0,0,0,0),n==="1"&&(n="24"),r=r.getTime(),e(a,l,r,n),$('[data-action="updateGraph"] option[value="range"]').addClass("hidden")});function d(n){P.render("admin/partials/pageviews-range-select",{}).then(function(l){const r=O.dialog({title:"[[admin/dashboard:page-views-custom]]",message:l,buttons:{submit:{label:"[[global:search]]",className:"btn-primary",callback:h}}}).on("shown.bs.modal",function(){const s=new Date,c=s.toISOString().slice(0,10);s.setDate(s.getDate()-1);const f=s.toISOString().slice(0,10);r.find("#startRange").val(n.attr("data-startRange")||f),r.find("#endRange").val(n.attr("data-endRange")||c)});function h(){const s=r.find("form").serializeObject(),c=/\d{4}-\d{2}-\d{2}/;if(!s.startRange&&!s.endRange){e(a,"days");return}else if(!c.test(s.startRange)||!c.test(s.endRange))return r.find(".alert-danger").removeClass("hidden"),!1;let f=new Date(s.endRange);f.setDate(f.getDate()+1),f=f.getTime();const M=(f-new Date(s.startRange).getTime())/(1e3*60*60*24);e(a,"days",f,M),n.attr("data-startRange",s.startRange),n.attr("data-endRange",s.endRange),n.find('option[value="range"]').text(s.startRange+" - "+s.endRange),n.val("range")}})}}function e(a,d=ajaxify.data.query.units||"hours",n=ajaxify.data.query.until,l=ajaxify.data.query.count){return u?new Promise(r=>{v.get(`/admin/analytics/${a}`,{units:d,until:n,amount:l}).then(h=>{d==="days"?u.data.xLabels=utils.getDaysArray(n,l):u.data.xLabels=utils.getHoursArray(),u.data.datasets[0].data=h,u.data.labels=u.data.xLabels,u.update();const s=$("#view-as-json"),c=$.param({units:d||"hours",until:n,count:l});s.attr("href",`${config.relative_path}/api/v3/admin/analytics/${ajaxify.data.set}?${c}`);const f=ajaxify.removeRelativePath(ajaxify.data.url.slice(1));ajaxify.updateHistory(`${f}?${c}`,!0),E.fire("action:admin.dashboard.updateGraph",{graph:u}),r(u)})}):Promise.reject(new Error("[[error:invalid-data]]"))}},49897(x,m,o){o.r(m),o.d(m,{del:()=>p,get:()=>v,head:()=>E,patch:()=>u,post:()=>b,put:()=>D});var i=o(91749),P=o.n(i),_=o(33530),O=o.n(_);const R=config.relative_path+"/api/v3";async function g(t,e){if(t.url=t.url.startsWith("/api")?config.relative_path+t.url:R+t.url,typeof e=="function"){y(t).then(a=>e(null,a),a=>e(a));return}try{return await y(t)}catch(a){if(a.message==="A valid login session was not found. Please log in and try again."){const{url:d}=await(0,i.fire)("filter:admin.reauth",{url:"login"});return(0,_.confirm)("[[error:api.reauth-required]]",n=>{n&&ajaxify.go(d)})}throw a}}async function y(t){const{url:e}=t;delete t.url,t.data&&!(t.data instanceof FormData)&&(t.data=JSON.stringify(t.data||{}),t.headers["content-type"]="application/json; charset=utf-8"),{options:t}=await(0,i.fire)("filter:api.options",{options:t}),t.data&&(t.body=t.data,delete t.data);const a=await fetch(e,t),{headers:d}=a;if(d.get("x-redirect"))return y({url:d.get("x-redirect"),...t});const n=d.get("content-type"),l=n&&n.startsWith("application/json");let r;if(t.method!=="HEAD"&&(l?r=await a.json():r=await a.text()),!a.ok){if(r){const h=l&&(r.status?.message||r.error||"");throw new Error(l&&h?h:r)}throw new Error(a.statusText)}return l&&r&&r.hasOwnProperty("status")&&r.hasOwnProperty("response")?r.response:r}function v(t,e,a){return g({url:t+(e&&Object.keys(e).length?"?"+$.param(e):"")},a)}function E(t,e,a){return g({url:t+(e&&Object.keys(e).length?"?"+$.param(e):""),method:"HEAD"},a)}function b(t,e,a){return g({url:t,method:"POST",data:e,headers:{"x-csrf-token":config.csrf_token}},a)}function u(t,e,a){return g({url:t,method:"PATCH",data:e,headers:{"x-csrf-token":config.csrf_token}},a)}function D(t,e,a){return g({url:t,method:"PUT",data:e,headers:{"x-csrf-token":config.csrf_token}},a)}function p(t,e,a){return g({url:t,method:"DELETE",data:e,headers:{"x-csrf-token":config.csrf_token}},a)}}}]);
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.