diff --git a/public/asset-manifest.json b/public/asset-manifest.json index 65bcfa2..ab3ed9d 100644 --- a/public/asset-manifest.json +++ b/public/asset-manifest.json @@ -1,6 +1,6 @@ { "core.min.js": "core.c5bd53363a.min.js", - "vendor.min.js": "vendor.b17b42ea2b.min.js", + "vendor.min.js": "vendor.cbc8c2964d.min.js", "mermaid.min.js": "mermaid.f848a72d16.min.js", "all.min.css": "all.7ac8730b9a.min.css", "markdown.min.js": "markdown.ad7b1d71c3.min.js", diff --git a/public/i18n/locale-en.json b/public/i18n/locale-en.json index 42e3701..34cb77c 100644 --- a/public/i18n/locale-en.json +++ b/public/i18n/locale-en.json @@ -130,7 +130,7 @@ "invalid_webhook_signature": "The webhook signature is invalid.", "webhook_processing_failed": "Webhook processing failed. Retry the delivery.", "github_app_authorization_cancelled": "GitHub authorization was cancelled.", - "github_account_link_required": "This username belongs to an existing account. Sign in to that account before connecting GitHub.", + "github_account_link_required": "This username belongs to an existing account. Sign in with legacy GitHub OAuth to keep access to your existing anonymizations, then connect the read-only GitHub App from GitHub connections.", "github_app_refresh_busy": "GitHub credentials are being renewed. Please retry shortly.", "github_grant_revocation_failed": "Unable to revoke the GitHub grant. Please retry.", "another_login_required": "Connect and verify another sign-in method before disconnecting OAuth.", diff --git a/public/partials/signin.htm b/public/partials/signin.htm index f3d9aee..fec24e9 100644 --- a/public/partials/signin.htm +++ b/public/partials/signin.htm @@ -1,6 +1,11 @@
Sign in to manage your anonymizations. Both connections use the same Anonymous GitHub account.
++ If you already have an Anonymous GitHub account, sign in with + legacy GitHub OAuth + to keep access to your existing anonymizations. You can connect the read-only GitHub App from GitHub connections after signing in. +
Continue with read-only GitHub App
Choose which repositories to allow after signing in. Private repositories are accessed with read-only permissions.
Continue with legacy GitHub OAuth
diff --git a/public/script/vendor.min.js b/public/script/vendor.min.js index 7e8cfad..98b8823 100644 --- a/public/script/vendor.min.js +++ b/public/script/vendor.min.js @@ -1,29 +1,29 @@ -"use strict";(()=>{var Ul=Object.defineProperty;var zl=(e,t)=>{for(var o in t)Ul(e,o,{get:t[o],enumerable:!0})};var ye={org:"/script/org.f4e2a3f59f.min.js",pdf:"/script/pdf.eaa7573247.min.js",notebook:"/script/notebook.8844e2735f.min.js",markdown:"/script/markdown.ad7b1d71c3.min.js",editor:"/script/editor.e243722d87.min.js"};var rn=new Map,Bl=ye;function Wt(e){if(!rn.has(e)){let t=document.createElement("script");t.src=Bl[e];let o=new Promise((r,n)=>{t.onload=r,t.onerror=()=>{rn.delete(e),t.remove(),n(new Error(`Unable to load ${e}. Please retry.`))}});rn.set(e,o),document.head.appendChild(t)}return rn.get(e)}async function tr(){await Wt("editor"),ace.config.set("basePath","/script/external/ace/")}function ds(e){let t=Object.create(null);for(let o of e.split(","))t[o]=1;return o=>o in t}var Me={},Kt=[],rt=()=>{},xn=()=>!1,us=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),cs=e=>e.startsWith("onUpdate:"),Ge=Object.assign,Ss=(e,t)=>{let o=e.indexOf(t);o>-1&&e.splice(o,1)},Gl=Object.prototype.hasOwnProperty,Te=(e,t)=>Gl.call(e,t),_e=Array.isArray,Pt=e=>Ds(e)==="[object Map]",ls=e=>Ds(e)==="[object Set]",sr=e=>Ds(e)==="[object Date]";var ke=e=>typeof e=="function",Ue=e=>typeof e=="string",ct=e=>typeof e=="symbol",Ae=e=>e!==null&&typeof e=="object",Xn=e=>(Ae(e)||ke(e))&&ke(e.then)&&ke(e.catch),rr=Object.prototype.toString,Ds=e=>rr.call(e),Zn=e=>Ds(e).slice(8,-1),an=e=>Ds(e)==="[object Object]",ln=e=>Ue(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ps=ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");var dn=e=>{let t=Object.create(null);return(o=>t[o]||(t[o]=e(o)))},jl=/-\w/g,Ke=dn(e=>e.replace(jl,t=>t.slice(1).toUpperCase())),Wl=/\B([A-Z])/g,qt=dn(e=>e.replace(Wl,"-$1").toLowerCase()),Yt=dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Rs=dn(e=>e?`on${Yt(e)}`:""),ht=(e,t)=>!Object.is(e,t),Ts=(e,...t)=>{for(let o=0;oLoading GitHub info for "+k.repoId+"..."),t.get("/api/admin/repos/"+k.repoId+"/github").then(T=>{b&&(b.document.open(),b.document.write('
'+JSON.stringify(T.data,null,2).replace(/[<>]/g,N=>N==="<"?"<":">")+""),b.document.close())},T=>{let N=T&&T.data?JSON.stringify(T.data,null,2):String(T);b&&(b.document.body.innerHTML='
'+N+"")})},e.statusCountFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.count:0},e.statusStorageFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=k=>{e.query.sort===k?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=k,e.query.direction="desc"),e.query.page=1},e.sortIcon=k=>e.query.sort===k?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",p={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""});let v=o.search();v.owner&&(e.query.owner=v.owner),v.conference&&(e.query.conference=v.conference),v.search&&(e.query.search=v.search);let g="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(g)||"[]"),e.savePreset=()=>{let k=window.prompt("Preset name:");if(!k)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(T=>T.name!==k),e.presets.push({name:k,query:b}),localStorage.setItem(g,JSON.stringify(e.presets))},e.applyPreset=k=>{Object.assign(e.query,k.query,{page:1})},e.deletePreset=k=>{e.presets=(e.presets||[]).filter(b=>b.name!==k.name),localStorage.setItem(g,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(k=>{e.selected[k.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(k=>e.selected[k.repoId]),e.bulkRefresh=()=>{let k=e.selectedRepos();k.length&&confirm(`Force refresh ${k.length} repositories?`)&&k.forEach(b=>e.updateRepository(b))},e.bulkRemoveCache=()=>{let k=e.selectedRepos();k.length&&confirm(`Purge cache for ${k.length} repositories?`)&&k.forEach(b=>e.removeCache(b))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let k=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));k.set("format","csv"),k.set("limit","10000"),window.open("/api/admin/repos?"+k.toString(),"_blank")},e.removeCache=k=>{confirm("Remove cached files for "+k.repoId+"?")&&t.delete("/api/admin/repos/"+k.repoId).then(()=>f(),b=>console.error(b))},e.removeRepository=k=>{confirm("Remove repository "+k.repoId+"?")&&t.delete("/api/repo/"+k.repoId+"/").then(()=>f(),b=>console.error(b))},e.updateRepository=k=>{let b=ze({title:`Refreshing ${k.repoId}...`,date:new Date,body:`The repository ${k.repoId} is going to be refreshed.`});e.toasts.push(b),t.post(`/api/repo/${k.repoId}/refresh`).then(T=>{T.data.status=="ready"?b.title=`${k.repoId} is refreshed.`:b.title=`Refreshing of ${k.repoId}.`},T=>{b.title=`Error during the refresh of ${k.repoId}.`,b.body=T.body})},e.fetchError=null;function f(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(k=>{e.total=k.data.total,e.totalPage=Math.ceil(k.data.total/e.query.limit),e.repositories=k.data.results,e.statusCounts=k.data.statusCounts||[],e.totalSize=k.data.totalSize||0,e.allSelected=!1},k=>{e.fetchError=k&&k.data&&k.data.error||"Failed to load repositories",console.error(k)})}f();let w=null;e.watch("query",()=>{r.timeout.cancel(w),w=r.timeout(f,500);let{page:k,search:b,...T}=e.query;saveFilterPrefs(u,T),a()},!0),a()},Fa=function(e,t,o){let r=mt(),n=as();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=f=>{if(f.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){f.preventDefault();let w=document.querySelector('.admin-filter-toolbar input[type="search"]');w&&w.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=f=>{f==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[f]="",e.query.page=1},e.chips=[];let a=()=>{let f=[];e.query.role&&f.push({key:"role",label:"Role",value:e.query.role}),e.chips=f};e.statusCountFor=f=>{let w=(e.statusCounts||[]).find(k=>k._id===f);return w?w.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=f=>{e.query.sort===f?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=f,e.query.direction="desc"),e.query.page=1},e.sortIcon=f=>e.query.sort===f?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",p={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(f=>{e.selected[f.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(f=>e.selected[f.username]),e.banUser=f=>{confirm(`Ban user ${f.username}?`)&&t.post(`/api/admin/users/${f.username}/ban`).then(v,w=>console.error(w))},e.activateUser=f=>{t.post(`/api/admin/users/${f.username}/activate`).then(v,w=>console.error(w))},e.bulkBan=()=>{let f=e.selectedUsers();f.length&&confirm(`Ban ${f.length} users?`)&&f.forEach(w=>e.banUser(w))},e.exportCsv=()=>{let f=new URLSearchParams(Object.entries(e.query).filter(([,w])=>w!==""&&w!==!1&&w!=null));f.set("format","csv"),f.set("limit","10000"),window.open("/api/admin/users?"+f.toString(),"_blank")},e.fetchError=null;function v(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(f=>{e.total=f.data.total,e.totalPage=Math.ceil(f.data.total/e.query.limit),e.users=f.data.results,e.statusCounts=f.data.statusCounts||[],e.allSelected=!1},f=>{e.fetchError=f&&f.data&&f.data.error||"Failed to load users",console.error(f)})}v();let g=null;e.watch("query",()=>{r.timeout.cancel(g),g=r.timeout(v,500);let{page:f,search:w,...k}=e.query;saveFilterPrefs(u,k),a()},!0),a()},La=function(e,t,o,r){let n=mt();e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=f=>{e.query.sort===f?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=f,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=f=>e.query.sort===f?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=f=>(e.repositories||[]).filter(w=>w.status===f).length,e.repoFiler=f=>e.filters.status[f.status]==!1?!1:!!(e.search.trim().length==0||f.source.fullName.indexOf(e.search)>-1||f.repoId.indexOf(e.search)>-1||f.statusMessage&&f.statusMessage.indexOf(e.search)>-1||f.conference&&f.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(f=>{e.selected[f.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(f=>e.selected[f.repoId]),e.bulkRefresh=()=>{let f=e.selectedRepos();f.length&&confirm(`Force refresh ${f.length} repositories?`)&&f.forEach(w=>e.updateRepository(w))},e.bulkRemoveCache=()=>{let f=e.selectedRepos();f.length&&confirm(`Purge cache for ${f.length} repositories?`)&&f.forEach(w=>e.removeCache(w))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let f=e.filteredRepositories||e.repositories,k=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),b=f.map(D=>[D.repoId,D.status,D.statusMessage||"",D.pageView||0,D.anonymizeDate||"",D.source&&D.source.fullName||"",D.conference||"",D.size&&D.size.storage||0].map(I=>{let C=String(I??"");return/[",\n\r]/.test(C)?'"'+C.replace(/"/g,'""')+'"':C}).join(",")),T=new Blob([k+` +`).filter(ie=>ie),source:{repositoryFullName:`${V.owner}/${V.repo}`,pullRequestId:V.pullRequestId},options:e.options,conference:e.conference};le();let se=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(se,H,{headers:{"Content-Type":"application/json"}}).then(()=>{window.location.href="/pr/"+e.pullRequestId},ie=>{ie.data&&(i("ERRORS."+ie.data.error).then(qe=>{e.error=qe},console.error),Se(ie.data.error))}).finally(()=>{R.target.disabled=!1})},e.watch("conference",()=>{he()}),e.watch("terms",()=>{e.detectedType==="repo"&&A(),e.detectedType==="pr"&&U(),e.detectedType==="gist"&&me()}),e.watch("options.image",()=>{e.detectedType==="repo"&&A(),e.detectedType==="pr"&&U(),e.detectedType==="gist"&&me()}),e.watch("options.link",()=>{e.detectedType==="repo"&&A(),e.detectedType==="pr"&&U(),e.detectedType==="gist"&&me()}),e.watch("details",()=>{e.detectedType==="pr"&&U(),e.detectedType==="gist"&&me()},!0)},Yo=function(e,t,o,r,n,i){let a=mt(),u=as(),p=0,h=!1;e.on("dispose",()=>{h=!0,p++,v&&v.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"keydown",function(U){if((U.metaKey||U.ctrlKey)&&U.key==="k"){U.preventDefault();var ue=document.querySelector(".tree-search-input");ue&&(ue.focus(),ue.select())}});var v=null;e.onFileSearchChange=function(){v&&(v.resolve(),v=null);let U=e.fileSearchQuery;if(!U||U.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let ue=i.defer();v=ue,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(U)}`,{timeout:ue.promise}).then(function(te){if(!(h||v!==ue)){v=null,e.fileSearchLoading=!1;var re={};e.files.forEach(function(L){re[(L.path||"")+"/"+L.name]=!0});for(var pe=[],me={},ge=0;ge
Loading GitHub info for "+k.repoId+"..."),t.get("/api/admin/repos/"+k.repoId+"/github").then(T=>{b&&(b.document.open(),b.document.write('
'+JSON.stringify(T.data,null,2).replace(/[<>]/g,N=>N==="<"?"<":">")+""),b.document.close())},T=>{let N=T&&T.data?JSON.stringify(T.data,null,2):String(T);b&&(b.document.body.innerHTML='
'+N+"")})},e.statusCountFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.count:0},e.statusStorageFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.storage:0},e.isErrorsOnly=()=>e.query&&e.query.error&&!e.query.ready&&!e.query.preparing&&!e.query.expired&&!e.query.removed,e.toggleErrorsOnly=()=>{e.isErrorsOnly()?Object.assign(e.query,{ready:!1,preparing:!0,expired:!1,removed:!1,error:!0}):Object.assign(e.query,{ready:!1,preparing:!1,expired:!1,removed:!1,error:!0}),e.query.page=1},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=k=>{e.query.sort===k?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=k,e.query.direction="desc"),e.query.page=1},e.sortIcon=k=>e.query.sort===k?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.repos.filterPrefs",p={page:1,limit:25,sort:"lastView",direction:"desc",search:"",owner:"",conference:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""});let v=o.search();v.owner&&(e.query.owner=v.owner),v.conference&&(e.query.conference=v.conference),v.search&&(e.query.search=v.search);let g="admin.repos.presets";e.presets=JSON.parse(localStorage.getItem(g)||"[]"),e.savePreset=()=>{let k=window.prompt("Preset name:");if(!k)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(T=>T.name!==k),e.presets.push({name:k,query:b}),localStorage.setItem(g,JSON.stringify(e.presets))},e.applyPreset=k=>{Object.assign(e.query,k.query,{page:1})},e.deletePreset=k=>{e.presets=(e.presets||[]).filter(b=>b.name!==k.name),localStorage.setItem(g,JSON.stringify(e.presets))},e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.repositories.forEach(k=>{e.selected[k.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(k=>e.selected[k.repoId]),e.bulkRefresh=()=>{let k=e.selectedRepos();k.length&&confirm(`Force refresh ${k.length} repositories?`)&&k.forEach(b=>e.updateRepository(b))},e.bulkRemoveCache=()=>{let k=e.selectedRepos();k.length&&confirm(`Purge cache for ${k.length} repositories?`)&&k.forEach(b=>e.removeCache(b))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let k=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));k.set("format","csv"),k.set("limit","10000"),window.open("/api/admin/repos?"+k.toString(),"_blank")},e.removeCache=k=>{confirm("Remove cached files for "+k.repoId+"?")&&t.delete("/api/admin/repos/"+k.repoId).then(()=>f(),b=>console.error(b))},e.removeRepository=k=>{confirm("Remove repository "+k.repoId+"?")&&t.delete("/api/repo/"+k.repoId+"/").then(()=>f(),b=>console.error(b))},e.updateRepository=k=>{let b=ze({title:`Refreshing ${k.repoId}...`,date:new Date,body:`The repository ${k.repoId} is going to be refreshed.`});e.toasts.push(b),t.post(`/api/repo/${k.repoId}/refresh`).then(T=>{T.data.status=="ready"?b.title=`${k.repoId} is refreshed.`:b.title=`Refreshing of ${k.repoId}.`},T=>{b.title=`Error during the refresh of ${k.repoId}.`,b.body=T.body})},e.fetchError=null;function f(){e.fetchError=null,t.get("/api/admin/repos",{params:e.query}).then(k=>{e.total=k.data.total,e.totalPage=Math.ceil(k.data.total/e.query.limit),e.repositories=k.data.results,e.statusCounts=k.data.statusCounts||[],e.totalSize=k.data.totalSize||0,e.allSelected=!1},k=>{e.fetchError=k&&k.data&&k.data.error||"Failed to load repositories",console.error(k)})}f();let w=null;e.watch("query",()=>{r.timeout.cancel(w),w=r.timeout(f,500);let{page:k,search:b,...T}=e.query;saveFilterPrefs(u,T),a()},!0),a()},La=function(e,t,o){let r=mt(),n=as();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.users=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.selected={},e.allSelected=!1;let i=f=>{if(f.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){f.preventDefault();let w=document.querySelector('.admin-filter-toolbar input[type="search"]');w&&w.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=f=>{f==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[f]="",e.query.page=1},e.chips=[];let a=()=>{let f=[];e.query.role&&f.push({key:"role",label:"Role",value:e.query.role}),e.chips=f};e.statusCountFor=f=>{let w=(e.statusCounts||[]).find(k=>k._id===f);return w?w.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=f=>{e.query.sort===f?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=f,e.query.direction="desc"),e.query.page=1},e.sortIcon=f=>e.query.sort===f?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.users.filterPrefs",p={page:1,limit:25,sort:"username",direction:"asc",search:"",status:"",role:"",dateFrom:"",dateTo:""},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""}),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,e.users.forEach(f=>{e.selected[f.username]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedUsers=()=>e.users.filter(f=>e.selected[f.username]),e.banUser=f=>{confirm(`Ban user ${f.username}?`)&&t.post(`/api/admin/users/${f.username}/ban`).then(v,w=>console.error(w))},e.activateUser=f=>{t.post(`/api/admin/users/${f.username}/activate`).then(v,w=>console.error(w))},e.bulkBan=()=>{let f=e.selectedUsers();f.length&&confirm(`Ban ${f.length} users?`)&&f.forEach(w=>e.banUser(w))},e.exportCsv=()=>{let f=new URLSearchParams(Object.entries(e.query).filter(([,w])=>w!==""&&w!==!1&&w!=null));f.set("format","csv"),f.set("limit","10000"),window.open("/api/admin/users?"+f.toString(),"_blank")},e.fetchError=null;function v(){e.fetchError=null,t.get("/api/admin/users",{params:e.query}).then(f=>{e.total=f.data.total,e.totalPage=Math.ceil(f.data.total/e.query.limit),e.users=f.data.results,e.statusCounts=f.data.statusCounts||[],e.allSelected=!1},f=>{e.fetchError=f&&f.data&&f.data.error||"Failed to load users",console.error(f)})}v();let g=null;e.watch("query",()=>{r.timeout.cancel(g),g=r.timeout(v,500);let{page:f,search:w,...k}=e.query;saveFilterPrefs(u,k),a()},!0),a()},Fa=function(e,t,o,r){let n=mt();e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.userInfo,e.repositories=[],e.search="",e.selected={},e.allSelected=!1;let i="admin.user.filterPrefs",a={filters:{status:{ready:!0,expired:!0,removed:!0,error:!0,preparing:!0}},sort:"anonymizeDate",direction:"desc"},u=loadFilterPrefs(i)||{};e.filters={status:Object.assign({},a.filters.status,u.filters&&u.filters.status||{})},e.query={sort:u.sort||a.sort,direction:u.direction||a.direction},e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort,e.sortBy=f=>{e.query.sort===f?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=f,e.query.direction="desc"),e.orderBy=(e.query.direction==="asc"?"":"-")+e.query.sort},e.sortIcon=f=>e.query.sort===f?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"",e.watch("query",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.watch("filters",()=>{saveFilterPrefs(i,{filters:e.filters,sort:e.query.sort,direction:e.query.direction})},!0),e.statusCountFor=f=>(e.repositories||[]).filter(w=>w.status===f).length,e.repoFiler=f=>e.filters.status[f.status]==!1?!1:!!(e.search.trim().length==0||f.source.fullName.indexOf(e.search)>-1||f.repoId.indexOf(e.search)>-1||f.statusMessage&&f.statusMessage.indexOf(e.search)>-1||f.conference&&f.conference.indexOf(e.search)>-1),e.selectAllOnPage=()=>{e.allSelected=!e.allSelected,(e.filteredRepositories||e.repositories).forEach(f=>{e.selected[f.repoId]=e.allSelected})},e.selectedCount=()=>Object.values(e.selected||{}).filter(Boolean).length,e.selectedRepos=()=>e.repositories.filter(f=>e.selected[f.repoId]),e.bulkRefresh=()=>{let f=e.selectedRepos();f.length&&confirm(`Force refresh ${f.length} repositories?`)&&f.forEach(w=>e.updateRepository(w))},e.bulkRemoveCache=()=>{let f=e.selectedRepos();f.length&&confirm(`Purge cache for ${f.length} repositories?`)&&f.forEach(w=>e.removeCache(w))},e.clearSelection=()=>{e.selected={},e.allSelected=!1},e.exportCsv=()=>{let f=e.filteredRepositories||e.repositories,k=["repoId","status","statusMessage","pageView","anonymizeDate","source.fullName","conference","size.storage"].join(","),b=f.map(D=>[D.repoId,D.status,D.statusMessage||"",D.pageView||0,D.anonymizeDate||"",D.source&&D.source.fullName||"",D.conference||"",D.size&&D.size.storage||0].map(I=>{let C=String(I??"");return/[",\n\r]/.test(C)?'"'+C.replace(/"/g,'""')+'"':C}).join(",")),T=new Blob([k+` `+b.join(` -`)],{type:"text/csv"}),N=document.createElement("a");N.href=URL.createObjectURL(T),N.download=r.username+"-repositories.csv",N.click()},e.showStatusMessage=f=>{let w=f.statusMessage||"(no message)";window.prompt(`Status message for ${f.repoId} (${f.status}):`,w)},e.fetchGithubInfo=f=>{let w=window.open("","_blank");w&&w.document.write("
Loading GitHub info for "+f.repoId+"..."),t.get("/api/admin/repos/"+f.repoId+"/github").then(k=>{w&&(w.document.open(),w.document.write('
'+JSON.stringify(k.data,null,2).replace(/[<>]/g,b=>b==="<"?"<":">")+""),w.document.close())},k=>{let b=k&&k.data?JSON.stringify(k.data,null,2):String(k);w&&(w.document.body.innerHTML='
'+b+"")})};function p(f){t.get("/api/admin/users/"+f+"/repos",{}).then(w=>{e.repositories=w.data},w=>{console.error(w)})}function h(f){t.get("/api/admin/users/"+f,{}).then(w=>{e.userInfo=w.data},w=>{console.error(w)})}h(r.username),p(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>h(r.username),f=>console.error(f))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>h(r.username),f=>console.error(f))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>h(r.username),f=>console.error(f))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>h(r.username),f=>console.error(f))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function v(){t.get("/api/admin/tokens").then(f=>{e.tokens=f.data||[]},f=>{f.status!==401&&f.status!==403&&console.error(f)})}v(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(f=>{e.tokenForm.plaintext=f.data.token,e.tokenForm.name="",v()},f=>console.error(f))},e.revokeToken=f=>{confirm(`Revoke token "${f.name}"?`)&&t.delete("/api/admin/tokens/"+f.id).then(()=>v(),w=>console.error(w))},e.removeCache=f=>{confirm("Remove cached files for "+f.repoId+"?")&&t.delete("/api/admin/repos/"+f.repoId).then(()=>p(r.username),w=>console.error(w))},e.removeRepository=f=>{confirm("Remove repository "+f.repoId+"?")&&t.delete("/api/repo/"+f.repoId+"/").then(()=>p(r.username),w=>console.error(w))},e.updateRepository=f=>{let w=ze({title:`Refreshing ${f.repoId}...`,date:new Date,body:`The repository ${f.repoId} is going to be refreshed.`});e.toasts.push(w),t.post(`/api/repo/${f.repoId}/refresh`).then(k=>{k.data.status=="ready"?w.title=`${f.repoId} is refreshed.`:w.title=`Refreshing of ${f.repoId}.`},k=>{w.title=`Error during the refresh of ${f.repoId}.`,w.body=k.body})},e.getGitHubRepositories=f=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(w=>{e.userInfo.repositories=w.data})};let g=null;e.watch("query",()=>{n.timeout.cancel(g),g=n.timeout(()=>{p(r.username)},500)},!0)},Ua=function(e,t,o){let r=mt(),n=as();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=k=>{if(k.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){k.preventDefault();let b=document.querySelector('.admin-filter-toolbar input[type="search"]');b&&b.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=k=>{k==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[k]="",e.query.page=1},e.chips=[];let a=()=>{let k=[];(e.query.dateFrom||e.query.dateTo)&&k.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=k};e.statusCountFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=k=>{e.query.sort===k?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=k,e.query.direction="desc"),e.query.page=1},e.sortIcon=k=>e.query.sort===k?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",p={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""});let v=o.search();v.search&&(e.query.search=v.search);let g="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(g)||"[]"),e.savePreset=()=>{let k=window.prompt("Preset name:");if(!k)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(T=>T.name!==k),e.presets.push({name:k,query:b}),localStorage.setItem(g,JSON.stringify(e.presets))},e.applyPreset=k=>{Object.assign(e.query,k.query,{page:1})},e.deletePreset=k=>{e.presets=(e.presets||[]).filter(b=>b.name!==k.name),localStorage.setItem(g,JSON.stringify(e.presets))},e.removeConference=k=>{confirm("Remove conference "+k.conferenceID+"?")&&t.delete("/api/admin/conferences/"+k.conferenceID).then(()=>f(),b=>console.error(b))},e.exportCsv=()=>{let k=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));k.set("format","csv"),k.set("limit","10000"),window.open("/api/admin/conferences?"+k.toString(),"_blank")},e.fetchError=null;function f(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(k=>{e.total=k.data.total,e.totalPage=Math.ceil(k.data.total/e.query.limit),e.conferences=k.data.results,e.statusCounts=k.data.statusCounts||[]},k=>{e.fetchError=k&&k.data&&k.data.error||"Failed to load conferences",console.error(k)})}f();let w=null;e.watch("query",()=>{r.timeout.cancel(w),w=r.timeout(f,500);let{page:k,search:b,...T}=e.query;saveFilterPrefs(u,T),a()},!0),a()},za=function(e,t,o,r,n){let i=mt();e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(b=>e.stateFilter[b._state]),e.jobProgressPct=b=>b&&b.progress&&typeof b.progress=="object"&&typeof b.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(b.progress.percent))):typeof b.progress=="number"?Math.max(0,Math.min(100,Math.round(b.progress))):null,e.jobDuration=b=>{if(!b.processedOn)return"-";let N=(b.finishedOn||Date.now())-b.processedOn;return N<1e3?N+"ms":(N/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=b=>{e.selectedQueue=b,a(),u()},e.setRange=b=>{e.range=b,u()};function a(){let b={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:b}).then(T=>{e.queueList=T.data.queues||[],e.jobs=T.data.jobs||[],e.selectedStats=e.queueList.find(N=>N.key===e.selectedQueue)||e.queueList[0]||null},T=>console.error(T))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(b=>{e.metricsPoints=b.data.points||[],n(f,0)},b=>console.error(b))}a(),u();let p=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(p)),e.refreshNow=function(){a(),u()};function h(b){let T=b&&b.data&&(b.data.message||b.data.error)||"Request failed";e.actionError=T,n(()=>{e.actionError=null},5e3),console.error(b)}e.actionError=null,e.removeJob=b=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,h)},e.retryJob=b=>{t.post(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,h)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,b=>console.error(b))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,b=>console.error(b))},e.togglePause=()=>{let b=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${b}`).then(a,T=>console.error(T))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,b=>console.error(b))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,b=>console.error(b))};let v=null;e.watch("query.search",()=>{i.timeout.cancel(v),v=i.timeout(a,350)}),e.expanded={},e.toggleJob=b=>{e.expanded[b.id]=!e.expanded[b.id]},e.humanTime=b=>{if(!b)return"";let T=new Date(b);return T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+T.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=b=>{if(!b)return"";var T=Math.max(0,Math.ceil((b-Date.now())/1e3));if(T<=0)return"resuming soon";var N=Math.floor(T/60),D=T%60;return"in "+(N>0?N+"m "+D+"s":D+"s")};function g(b){if(b<=0)return{ticks:[0],niceMax:1};let T=Math.pow(10,Math.floor(Math.log10(b))),N=T;b/N<2?N=T/2:b/N>5&&(N=T*2);let D=Math.ceil(b/N)*N,I=[];for(let C=0;C<=D;C+=N)I.push(C);return{ticks:I,niceMax:D}}function f(){var b=document.getElementById("q-throughput-chart");if(!b)return;var T=b.getContext("2d"),N=window.devicePixelRatio||1,D=b.parentElement.getBoundingClientRect(),I=44,C=50,A=20,q=D.width-40,Z=180,x=q-I-C,K=Z-A;b.width=q*N,b.height=Z*N,b.style.width=q+"px",b.style.height=Z+"px",T.setTransform(N,0,0,N,0,0);var U=document.body.classList.contains("dark-mode"),ue="#8A857C",te=U?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",re=U?"#A7B2FF":"#3B4AD6",pe=U?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",me=U?"#F08A82":"#B42318",ge=U?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",he=U?"#F5C842":"#B8860B",le=e.metricsPoints||[];if(le.length===0){T.fillStyle=ue,T.font="12px monospace",T.textAlign="center",T.fillText("No metrics data yet",q/2,Z/2),w=null;return}var Ie=le.map(function(M){return M.completed}),Se=le.map(function(M){return M.failed}),R=le.map(function(M){return M.avgMs}),V=le.length,H=x/(V-1||1),se=Math.max(1,Math.max.apply(null,Ie),Math.max.apply(null,Se)),ie=g(se),qe=Math.max.apply(null,R),F=qe>0?g(qe):{ticks:[0],niceMax:1},ne=function(M){return K-M/ie.niceMax*(K-10)},L=function(M){return K-M/F.niceMax*(K-10)},W=function(M){return I+M*H};T.textAlign="right",T.textBaseline="middle",T.font="10px monospace",ie.ticks.forEach(function(M){var J=ne(M);T.strokeStyle=te,T.lineWidth=1,T.beginPath(),T.moveTo(I,J),T.lineTo(q-C,J),T.stroke(),T.fillStyle=ue,T.fillText(M>=1e3?(M/1e3).toFixed(1)+"k":String(M),I-6,J)}),qe>0&&(T.textAlign="left",F.ticks.forEach(function(M){var J=L(M);T.fillStyle=he,T.fillText(M>=1e3?(M/1e3).toFixed(1)+"s":M+"ms",q-C+6,J)}));var fe=Date.now(),Ce=Math.min(6,V);T.textAlign="center",T.textBaseline="top";for(var ce=0;ce
Loading GitHub info for "+f.repoId+"..."),t.get("/api/admin/repos/"+f.repoId+"/github").then(k=>{w&&(w.document.open(),w.document.write('
'+JSON.stringify(k.data,null,2).replace(/[<>]/g,b=>b==="<"?"<":">")+""),w.document.close())},k=>{let b=k&&k.data?JSON.stringify(k.data,null,2):String(k);w&&(w.document.body.innerHTML='
'+b+"")})};function p(f){t.get("/api/admin/users/"+f+"/repos",{}).then(w=>{e.repositories=w.data},w=>{console.error(w)})}function h(f){t.get("/api/admin/users/"+f,{}).then(w=>{e.userInfo=w.data},w=>{console.error(w)})}h(r.username),p(r.username),e.banUser=()=>{confirm(`Ban user ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/ban`).then(()=>h(r.username),f=>console.error(f))},e.activateUser=()=>{t.post(`/api/admin/users/${r.username}/activate`).then(()=>h(r.username),f=>console.error(f))},e.promoteUser=()=>{confirm(`Promote ${r.username} to admin?`)&&t.post(`/api/admin/users/${r.username}/promote`).then(()=>h(r.username),f=>console.error(f))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${r.username}?`)&&t.post(`/api/admin/users/${r.username}/demote`).then(()=>h(r.username),f=>console.error(f))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function v(){t.get("/api/admin/tokens").then(f=>{e.tokens=f.data||[]},f=>{f.status!==401&&f.status!==403&&console.error(f)})}v(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(f=>{e.tokenForm.plaintext=f.data.token,e.tokenForm.name="",v()},f=>console.error(f))},e.revokeToken=f=>{confirm(`Revoke token "${f.name}"?`)&&t.delete("/api/admin/tokens/"+f.id).then(()=>v(),w=>console.error(w))},e.removeCache=f=>{confirm("Remove cached files for "+f.repoId+"?")&&t.delete("/api/admin/repos/"+f.repoId).then(()=>p(r.username),w=>console.error(w))},e.removeRepository=f=>{confirm("Remove repository "+f.repoId+"?")&&t.delete("/api/repo/"+f.repoId+"/").then(()=>p(r.username),w=>console.error(w))},e.updateRepository=f=>{let w=ze({title:`Refreshing ${f.repoId}...`,date:new Date,body:`The repository ${f.repoId} is going to be refreshed.`});e.toasts.push(w),t.post(`/api/repo/${f.repoId}/refresh`).then(k=>{k.data.status=="ready"?w.title=`${f.repoId} is refreshed.`:w.title=`Refreshing of ${f.repoId}.`},k=>{w.title=`Error during the refresh of ${f.repoId}.`,w.body=k.body})},e.getGitHubRepositories=f=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(w=>{e.userInfo.repositories=w.data})};let g=null;e.watch("query",()=>{n.timeout.cancel(g),g=n.timeout(()=>{p(r.username)},500)},!0)},Ua=function(e,t,o){let r=mt(),n=as();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let i=k=>{if(k.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){k.preventDefault();let b=document.querySelector('.admin-filter-toolbar input[type="search"]');b&&b.focus()}};n(document,"keydown",i),e.on("dispose",()=>document.removeEventListener("keydown",i)),e.clearFilter=k=>{k==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[k]="",e.query.page=1},e.chips=[];let a=()=>{let k=[];(e.query.dateFrom||e.query.dateTo)&&k.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=k};e.statusCountFor=k=>{let b=(e.statusCounts||[]).find(T=>T._id===k);return b?b.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=k=>{e.query.sort===k?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=k,e.query.direction="desc"),e.query.page=1},e.sortIcon=k=>e.query.sort===k?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",p={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!1,expired:!1,removed:!1,error:!0,preparing:!0},h=loadFilterPrefs(u)||{};e.query=Object.assign({},p,h,{page:1,search:""});let v=o.search();v.search&&(e.query.search=v.search);let g="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(g)||"[]"),e.savePreset=()=>{let k=window.prompt("Preset name:");if(!k)return;let b=Object.assign({},e.query);delete b.page,e.presets=(e.presets||[]).filter(T=>T.name!==k),e.presets.push({name:k,query:b}),localStorage.setItem(g,JSON.stringify(e.presets))},e.applyPreset=k=>{Object.assign(e.query,k.query,{page:1})},e.deletePreset=k=>{e.presets=(e.presets||[]).filter(b=>b.name!==k.name),localStorage.setItem(g,JSON.stringify(e.presets))},e.removeConference=k=>{confirm("Remove conference "+k.conferenceID+"?")&&t.delete("/api/admin/conferences/"+k.conferenceID).then(()=>f(),b=>console.error(b))},e.exportCsv=()=>{let k=new URLSearchParams(Object.entries(e.query).filter(([,b])=>b!==""&&b!==!1&&b!=null));k.set("format","csv"),k.set("limit","10000"),window.open("/api/admin/conferences?"+k.toString(),"_blank")},e.fetchError=null;function f(){e.fetchError=null,t.get("/api/admin/conferences",{params:e.query}).then(k=>{e.total=k.data.total,e.totalPage=Math.ceil(k.data.total/e.query.limit),e.conferences=k.data.results,e.statusCounts=k.data.statusCounts||[]},k=>{e.fetchError=k&&k.data&&k.data.error||"Failed to load conferences",console.error(k)})}f();let w=null;e.watch("query",()=>{r.timeout.cancel(w),w=r.timeout(f,500);let{page:k,search:b,...T}=e.query;saveFilterPrefs(u,T),a()},!0),a()},za=function(e,t,o,r,n){let i=mt();e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.queueList=[],e.jobs=[],e.selectedQueue="download",e.selectedStats=null,e.range="1h",e.allStates=["active","waiting","delayed","failed","completed"],e.stateFilter={active:!0,waiting:!0,delayed:!0,failed:!0,completed:!0},e.query={search:"",autoRefresh:!0},e.filteredJobs=()=>(e.jobs||[]).filter(b=>e.stateFilter[b._state]),e.jobProgressPct=b=>b&&b.progress&&typeof b.progress=="object"&&typeof b.progress.percent=="number"?Math.max(0,Math.min(100,Math.round(b.progress.percent))):typeof b.progress=="number"?Math.max(0,Math.min(100,Math.round(b.progress))):null,e.jobDuration=b=>{if(!b.processedOn)return"-";let N=(b.finishedOn||Date.now())-b.processedOn;return N<1e3?N+"ms":(N/1e3).toFixed(1)+"s"},e.metricsPoints=[],e.selectQueue=b=>{e.selectedQueue=b,a(),u()},e.setRange=b=>{e.range=b,u()};function a(){let b={queue:e.selectedQueue,search:e.query.search};t.get("/api/admin/queues",{params:b}).then(T=>{e.queueList=T.data.queues||[],e.jobs=T.data.jobs||[],e.selectedStats=e.queueList.find(N=>N.key===e.selectedQueue)||e.queueList[0]||null},T=>console.error(T))}function u(){t.get("/api/admin/queues/metrics",{params:{queue:e.selectedQueue,range:e.range}}).then(b=>{e.metricsPoints=b.data.points||[],n(f,0)},b=>console.error(b))}a(),u();let p=r(()=>{e.query.autoRefresh&&(a(),u())},15e3);e.on("dispose",()=>r.cancel(p)),e.refreshNow=function(){a(),u()};function h(b){let T=b&&b.data&&(b.data.message||b.data.error)||"Request failed";e.actionError=T,n(()=>{e.actionError=null},5e3),console.error(b)}e.actionError=null,e.removeJob=b=>{t.delete(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,h)},e.retryJob=b=>{t.post(`/api/admin/queue/${e.selectedQueue}/${b.id}`).then(a,h)},e.retryFailed=()=>{confirm(`Retry all failed jobs in ${e.selectedQueue}?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/retry-failed`).then(a,b=>console.error(b))},e.drainSelected=()=>{confirm(`Drain the ${e.selectedQueue} queue?`)&&t.post(`/api/admin/queue/${e.selectedQueue}/drain`).then(a,b=>console.error(b))},e.togglePause=()=>{let b=e.selectedStats&&e.selectedStats.paused?"resume":"pause";t.post(`/api/admin/queue/${e.selectedQueue}/${b}`).then(a,T=>console.error(T))},e.emptyQueue=()=>{confirm(`Empty the ${e.selectedQueue} queue? This removes ALL jobs.`)&&t.post(`/api/admin/queue/${e.selectedQueue}/empty`).then(a,b=>console.error(b))},e.pauseAll=()=>{confirm("Pause all queues?")&&t.post("/api/admin/queues/pause-all").then(a,b=>console.error(b))};let v=null;e.watch("query.search",()=>{i.timeout.cancel(v),v=i.timeout(a,350)}),e.expanded={},e.toggleJob=b=>{e.expanded[b.id]=!e.expanded[b.id]},e.humanTime=b=>{if(!b)return"";let T=new Date(b);return T.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+" "+T.toLocaleDateString([],{month:"short",day:"numeric"})},e.delayCountdown=b=>{if(!b)return"";var T=Math.max(0,Math.ceil((b-Date.now())/1e3));if(T<=0)return"resuming soon";var N=Math.floor(T/60),D=T%60;return"in "+(N>0?N+"m "+D+"s":D+"s")};function g(b){if(b<=0)return{ticks:[0],niceMax:1};let T=Math.pow(10,Math.floor(Math.log10(b))),N=T;b/N<2?N=T/2:b/N>5&&(N=T*2);let D=Math.ceil(b/N)*N,I=[];for(let C=0;C<=D;C+=N)I.push(C);return{ticks:I,niceMax:D}}function f(){var b=document.getElementById("q-throughput-chart");if(!b)return;var T=b.getContext("2d"),N=window.devicePixelRatio||1,D=b.parentElement.getBoundingClientRect(),I=44,C=50,A=20,q=D.width-40,Z=180,x=q-I-C,K=Z-A;b.width=q*N,b.height=Z*N,b.style.width=q+"px",b.style.height=Z+"px",T.setTransform(N,0,0,N,0,0);var U=document.body.classList.contains("dark-mode"),ue="#8A857C",te=U?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",re=U?"#A7B2FF":"#3B4AD6",pe=U?"rgba(167,178,255,0.12)":"rgba(59,74,214,0.08)",me=U?"#F08A82":"#B42318",ge=U?"rgba(240,138,130,0.08)":"rgba(180,35,24,0.06)",he=U?"#F5C842":"#B8860B",le=e.metricsPoints||[];if(le.length===0){T.fillStyle=ue,T.font="12px monospace",T.textAlign="center",T.fillText("No metrics data yet",q/2,Z/2),w=null;return}var Ie=le.map(function(M){return M.completed}),Se=le.map(function(M){return M.failed}),R=le.map(function(M){return M.avgMs}),V=le.length,H=x/(V-1||1),se=Math.max(1,Math.max.apply(null,Ie),Math.max.apply(null,Se)),ie=g(se),qe=Math.max.apply(null,R),L=qe>0?g(qe):{ticks:[0],niceMax:1},ne=function(M){return K-M/ie.niceMax*(K-10)},F=function(M){return K-M/L.niceMax*(K-10)},W=function(M){return I+M*H};T.textAlign="right",T.textBaseline="middle",T.font="10px monospace",ie.ticks.forEach(function(M){var J=ne(M);T.strokeStyle=te,T.lineWidth=1,T.beginPath(),T.moveTo(I,J),T.lineTo(q-C,J),T.stroke(),T.fillStyle=ue,T.fillText(M>=1e3?(M/1e3).toFixed(1)+"k":String(M),I-6,J)}),qe>0&&(T.textAlign="left",L.ticks.forEach(function(M){var J=F(M);T.fillStyle=he,T.fillText(M>=1e3?(M/1e3).toFixed(1)+"s":M+"ms",q-C+6,J)}));var fe=Date.now(),Ce=Math.min(6,V);T.textAlign="center",T.textBaseline="top";for(var ce=0;ce
The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.
Fill in the details \u2014 it only takes a minute.
Take ownership of an existing anonymized repository so it appears on your dashboard.
',3)),s("div",gN,[t[5]||(t[5]=s("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),E((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=we(n=>e.submitForm(n,()=>{e.claim()}),["prevent"]))},[s("div",bN,[t[1]||(t[1]=s("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),E(s("input",{type:"text",class:O(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",required:""},null,2),[[o,{state:e.viewState,set:n=>{e.repoUrl=n},value:e.repoUrl,form:"claimForm",options:{}}]]),E(s("div",wN," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[G,e.claimForm?.repoUrl?.errors?.not_found]])]),s("div",kN,[t[2]||(t[2]=s("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),E(s("input",{type:"text",class:O(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",required:""},null,2),[[o,{state:e.viewState,set:n=>{e.repoId=n},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=s("small",{id:"idHelp",class:"form-text text-muted"},[y("The ID is the last part of the anonymized URL: "),s("code",null,"anonymous.4open.science/r/Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.
Every repository, pull request, and gist you\u2019ve mirrored, with live status and stats.
Manage GitHub connections and read-only access
',3)),m(" Quota "),e.quota?(l(),d("div",eD,[(l(),d(Y,null,oe([{key:"repository",label:"Repositories",kind:"count"},{key:"storage",label:"Storage",kind:"bytes"},{key:"file",label:"Files",kind:"count"}],(n,i)=>s("div",tD,[s("div",sD,[s("span",nD,c(n?.label),1),n?.kind==="count"?(l(),d("span",oD,[y(c(e.fmt?.number(e.quota[n?.key].used)),1),e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("span",rD," / "+c(e.fmt?.number(e.quota[n?.key].total)),1)),e.quota[n?.key].unlimited?(l(),d("span",iD,"Unlimited")):m("v-if",!0)])):m("v-if",!0),n?.kind==="bytes"?(l(),d("span",aD,[y(c(e.fmt?.humanFileSize(e.quota[n?.key].used)),1),e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("span",lD," / "+c(e.fmt?.humanFileSize(e.quota[n?.key].total)),1)),e.quota[n?.key].unlimited?(l(),d("span",dD,"Unlimited")):m("v-if",!0)])):m("v-if",!0)]),s("div",{class:O(["quota-track","quota-"+e.quota[n?.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":n?.label+" quota","aria-valuenow":e.quota[n?.key].used,"aria-valuemax":e.quota[n?.key].unlimited?e.quota[n?.key].used:e.quota[n?.key].total,"aria-valuetext":e.quota[n?.key].unlimited?"unlimited":e.fmt.number(e.quota[n?.key].percent,0)+"% used"},[e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:Ve({width:e.quota[n?.key].percent+"%"})},null,4))],10,uD)])),64))])):m("v-if",!0),m(" Search + filters "),E((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[5]||(t[5]=we(n=>e.submitForm(n,()=>{n.preventDefault()}),["prevent"]))},[s("div",cD,[E(s("input",pD,null,512),[[o,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),s("div",fD,[s("div",mD,[s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[0]||(t[0]=n=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,hD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="repo"}]),onClick:t[1]||(t[1]=n=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},"Repos",10,vD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="pr"}]),onClick:t[2]||(t[2]=n=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},"PRs",10,yD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="gist"}]),onClick:t[3]||(t[3]=n=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},"Gists",10,gD)]),s("div",bD,[s("button",wD,[t[12]||(t[12]=s("span",{class:"filter-btn-label"},"Sort",-1)),s("span",kD,c(e.sortLabel()),1),s("i",{class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2),s("span",_D,c(e.sortDesc()?"descending":"ascending"),1)]),s("div",ED,[t[14]||(t[14]=s("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(Y,null,oe(e.sortFields,(n,i,a)=>(l(),d("div",CD,[s("input",{class:"form-check-input",type:"radio",name:"sort",onClick:u=>e.setSort(i,n.defaultDesc),checked:e.isSortedBy(i),id:"sort-"+a},null,8,ND),s("label",{class:"form-check-label",for:"sort-"+a},c(n?.label),9,SD)]))),256)),t[15]||(t[15]=s("div",{class:"dropdown-divider"},null,-1)),s("button",{type:"button",class:"dropdown-item",onClick:t[4]||(t[4]=n=>e.toggleSortDirection())},[t[13]||(t[13]=s("i",{class:"fas fa-exchange-alt fa-rotate-90","aria-hidden":"true"},null,-1)),y(" "+c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])])]),s("div",DD,[s("button",RD,[t[16]||(t[16]=s("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?m("v-if",!0):(l(),d("span",TD,"All")),e.hasHiddenStatus()?(l(),d("span",OD,c(e.hiddenStatusCount())+" hidden",1)):m("v-if",!0)]),s("div",AD,[t[17]||(t[17]=s("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(Y,null,oe(e.statusKeyLabels,(n,i,a)=>(l(),d("div",ID,[E(s("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,VD),[[o,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),s("label",{class:"form-check-label",for:"status-"+i},c(n),9,PD)]))),256))])])])],32)),[[r,e.viewState]]),m(" Result count + active filter chips "),e.loading?m("v-if",!0):(l(),d("div",qD,[s("span",MD,[e.filteredItems?.length===e.items?.length?(l(),d("span",$D,[y(c(e.fmt?.number(e.items?.length))+" anonymization",1),e.items?.length!==1?(l(),d("span",FD,"s")):m("v-if",!0)])):m("v-if",!0),e.filteredItems?.length!==e.items?.length?(l(),d("span",LD,c(e.fmt?.number(e.filteredItems?.length))+" of "+c(e.fmt?.number(e.items?.length))+" shown",1)):m("v-if",!0)]),(l(!0),d(Y,null,oe(e.filters?.status,(n,i,a)=>(l(),d(Y,null,[n===!1?(l(),d("span",UD,[y(" Hiding "+c(e.statusKeyLabels[i])+" ",1),s("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusKeyLabels[i]+" again"},"\xD7",8,zD)])):m("v-if",!0)],64))),256)),e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn-link-inline",onClick:t[6]||(t[6]=n=>e.clearFilters())},"Clear filters")):m("v-if",!0)]))]),m(" Table "),s("div",{class:"paper-table paper-table-dashboard w-100",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[s("div",BD,[s("div",{role:"columnheader","aria-sort":e.isSortedBy("_name")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("_name")}]),onClick:t[7]||(t[7]=n=>e.setSort("_name"))},[t[19]||(t[19]=y(" Anonymization ",-1)),e.isSortedBy("_name")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,GD),s("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("status")}]),onClick:t[8]||(t[8]=n=>e.setSort("status"))},[t[20]||(t[20]=y(" Status ",-1)),e.isSortedBy("status")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,jD),s("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[9]||(t[9]=n=>e.setSort("pageView"))},[t[21]||(t[21]=y(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,WD),s("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[10]||(t[10]=n=>e.setSort("options.expirationDate"))},[t[22]||(t[22]=y(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,KD),t[23]||(t[23]=s("div",{role:"columnheader"},[s("span",{class:"sr-only"},"Actions")],-1))]),m(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(Y,null,oe([1,2,3,4],(n,i)=>(l(),d(Y,null,[e.loading?(l(),d("div",YD,[...t[24]||(t[24]=[s("div",{class:"cell-anon",role:"cell"},[s("span",{class:"skeleton skeleton-badge"}),s("div",{class:"anon-text"},[s("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),s("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),s("div",{class:"cell-status",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),s("div",{class:"cell-views num",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),s("div",{class:"cell-expires",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),s("div",{class:"cell-actions",role:"cell"},null,-1)])])):m("v-if",!0)],64))),64)),(l(!0),d(Y,null,oe(e.filteredItems,(n,i)=>(l(),d(Y,{key:n?._type+":"+(n?._id||i)},[e.loading?m("v-if",!0):(l(),d("div",{key:0,class:O(["paper-table-row",{"repo-inactive":n?._statusKey=="expired"||n?._statusKey=="removed","repo-error":n?.status=="error","row-clickable":!!n?._viewUrl}]),role:"row",onClick:a=>e.openItem(n,a)},[s("div",QD,[s("span",{class:O(["type-badge",{"type-repo":n?._type==="repo","type-pr":n?._type==="pr","type-gist":n?._type==="gist"}])},c(n?._type==="repo"?"Repo":n?._type==="pr"?"PR":"Gist"),3),s("div",xD,[s("div",XD,[n?._viewUrl?(l(),d("a",{key:0,class:"repo-name",textContent:c(n?._name),href:e.safeUrl(n?._viewUrl)},null,8,ZD)):m("v-if",!0),n?._viewUrl?m("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(n?._name)},null,8,eR)),n?.role==="coauthor"?(l(),d("span",tR,"Co-author")):m("v-if",!0)]),!n?._broken||n?.conference?(l(),d("div",sR,[n?._type==="repo"&&n?.source?.fullName&&!n?._broken?(l(),d("span",nR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.fullName),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/")},null,8,oR),n?.options?.update&&n?.source?.branch?(l(),d("span",rR,[t[25]||(t[25]=y(" \xB7 ",-1)),s("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.branch),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.branch)},null,8,iR)])):m("v-if",!0),n?.source?.commit?(l(),d("span",aR,[t[26]||(t[26]=y(" \xB7 ",-1)),s("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.commit)},"@"+c(n?.source?.commit?.substring(0,8)),9,lR)])):m("v-if",!0)])):m("v-if",!0),n?._type==="pr"&&n?.source?.repositoryFullName&&!n?._broken?(l(),d("span",dR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?._source),href:e.safeUrl("https://github.com/"+n?.source?.repositoryFullName+"/pull/"+n?.source?.pullRequestId)},null,8,uR)])):m("v-if",!0),n?._type==="gist"&&n?.source?.gistId&&!n?._broken?(l(),d("span",cR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?._source),href:e.safeUrl("https://gist.github.com/"+n?.source?.gistId)},null,8,pR)])):m("v-if",!0),n?.conference?(l(),d("span",{key:3,class:"cell-conf conf-tag",title:n?.conference},[t[27]||(t[27]=s("i",{class:"fas fa-university","aria-hidden":"true"},null,-1)),t[28]||(t[28]=y()),s("span",{textContent:c(n?.conference)},null,8,mR)],8,fR)):m("v-if",!0)])):m("v-if",!0)])]),s("div",hR,[s("div",vR,[s("span",{class:O(["status-dot","status-"+n?._statusKey]),"aria-hidden":"true"},null,2),s("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(n?.status))},null,8,yR)]),n?.status=="error"&&n?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(n?.statusMessage)),title:n?.statusMessage},null,8,gR)):m("v-if",!0),n?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(n?.anonymizeDate||n?.lastView)}," Last activity "+c(e.fmt?.humanTime(n?.anonymizeDate||n?.lastView))+" \xB7 may be stuck ",9,bR)):m("v-if",!0),n?.status!="error"&&!n?._stale&&n?.anonymizeDate?(l(),d("div",wR," anonymized "+c(e.fmt?.humanTime(n?.anonymizeDate)),1)):m("v-if",!0)]),s("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(n?.pageView))},null,8,kR),s("div",_R,[n?._expiry?.kind==="never"?(l(),d("span",ER,"Never")):m("v-if",!0),n?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(n?._expiry?.date))},null,8,CR)):m("v-if",!0),n?._expiry?.kind==="expired"&&n?._expiry?.date?(l(),d("span",NR,"Expired "+c(e.fmt?.humanTime(n?._expiry?.date)),1)):m("v-if",!0),n?._expiry?.kind==="expired"&&!n?._expiry?.date?(l(),d("span",SR,"Expired")):m("v-if",!0),n?._expiry?.kind==="none"?(l(),d("span",DR,"\u2014")):m("v-if",!0)]),s("div",RR,[n?._broken?m("v-if",!0):(l(),d("div",TR,[s("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+n?._name},[...t[29]||(t[29]=[s("i",{class:"fas fa-ellipsis-h","aria-hidden":"true"},null,-1)])],8,OR),s("div",AR,[s("a",{class:"dropdown-item",href:e.safeUrl(n?._viewUrl)},[...t[30]||(t[30]=[s("i",{class:"fa fa-eye","aria-hidden":"true"},null,-1),y(" View ",-1)])],8,IR),n?._type==="repo"&&n?.options?.page&&n?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+n?.repoId+"/")},[...t[31]||(t[31]=[s("i",{class:"fas fa-globe","aria-hidden":"true"},null,-1),y(" View page ",-1)])],8,VR)):m("v-if",!0),s("a",{class:"dropdown-item",href:e.safeUrl(n?._editUrl)},[...t[32]||(t[32]=[s("i",{class:"far fa-edit","aria-hidden":"true"},null,-1),y(" Edit ",-1)])],8,PR),n?.status=="ready"||n?.status=="error"?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:a=>e.refreshItem(n)},[...t[33]||(t[33]=[s("i",{class:"fas fa-sync","aria-hidden":"true"},null,-1),y(" Force update ",-1)])],8,qR)):m("v-if",!0),n?.status=="removed"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:a=>e.refreshItem(n)},[...t[34]||(t[34]=[s("i",{class:"fas fa-check-circle","aria-hidden":"true"},null,-1),y(" Enable ",-1)])],8,MR)):m("v-if",!0),n?.status=="expired"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:a=>e.extendItem(n)},[...t[35]||(t[35]=[s("i",{class:"fas fa-calendar-plus","aria-hidden":"true"},null,-1),y(" Extend 6 months ",-1)])],8,$R)):m("v-if",!0),(n?.status=="ready"||n?.status=="expired"||n?.status=="error")&&n?.role!=="coauthor"?(l(),d("div",FR,[t[37]||(t[37]=s("div",{class:"dropdown-divider"},null,-1)),s("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeItem(n)},[...t[36]||(t[36]=[s("i",{class:"fas fa-trash-alt","aria-hidden":"true"},null,-1),y(" Remove ",-1)])],8,LR)])):m("v-if",!0)])]))])],10,JD))],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",UR,[t[39]||(t[39]=s("i",{class:"fas fa-inbox","aria-hidden":"true"},null,-1)),e.items?.length==0?(l(),d("span",zR,"You have no anonymizations yet.")):m("v-if",!0),e.items?.length>0?(l(),d("span",HR,"Nothing matches the current filters.")):m("v-if",!0),s("div",BR,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[11]||(t[11]=n=>e.clearFilters())},"Clear filters")):m("v-if",!0),e.items?.length==0?(l(),d("a",GR,[...t[38]||(t[38]=[s("i",{class:"fa fa-plus-circle mr-1","aria-hidden":"true"},null,-1),y(" New anonymization",-1)])])):m("v-if",!0)])])):m("v-if",!0)],8,HD)])])}var jR={class:"explorer-page"},WR=["aria-label"],KR=["textContent"],YR={class:"leftCol-head"},JR={class:"leftCol-search"},QR={class:"tree-search-box"},xR={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},XR={class:"leftCol-project-header"},ZR=["textContent"],eT={class:"project-file-count"},tT={class:"leftCol-body"},sT={key:0,class:"paper-inline-warning",role:"alert"},nT={key:1,class:"paper-inline-warning",role:"alert"},oT={class:"leftCol-foot"},rT=["title"],iT={class:"explorer-main"},aT={class:"status-bar"},lT={class:"breadcrumb paths","aria-label":"Path"},dT=["textContent"],uT={class:"status-bar-actions"},cT=["href"],pT={class:"d-none d-md-inline"},fT={class:"d-none d-md-inline"},mT=["href"],hT=["href"],vT=["href"],yT=["href"],gT={class:"explorer-content"};function al(e,t){let o=et("tree"),r=et("partial-view"),n=be("field");return l(),d("div",jR,[E(s("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[s("i",{class:O(["fas",e.sidebarCollapsed?"fa-folder-open":"fa-times"])},null,2),s("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,KR)],8,WR),[[G,e.files?.length]]),E(s("div",{class:O(["leftCol",{collapsed:e.sidebarCollapsed}])},[s("div",YR,[t[7]||(t[7]=s("span",{class:"leftCol-eyebrow"},"Files",-1)),s("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[s("i",{class:"fas fa-times"},null,-1)])])]),s("div",JR,[s("div",QR,[s("i",{class:O(["fas tree-search-icon",e.fileSearchLoading?"fa-spinner fa-spin":"fa-search"])},null,2),E(s("input",xR,null,512),[[n,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),E(s("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[G,!e.fileSearchQuery]]),E(s("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[G,e.fileSearchQuery]])])]),s("div",XR,[s("span",{class:"project-name",textContent:c(e.repoId)},null,8,ZR),s("span",eT,c(e.fileCounts?.[""]||e.files?.length)+" files",1)]),s("div",tT,[e.options?.truncatedFolders?.length>0?(l(),d("div",sT,[t[8]||(t[8]=s("i",{class:"fas fa-exclamation-triangle"},null,-1)),y(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):m("v-if",!0),e.options?.hasSubmodules?(l(),d("div",nT,[t[9]||(t[9]=s("i",{class:"fas fa-exclamation-triangle"},null,-1)),y(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):m("v-if",!0),De(o,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),s("div",oT,[s("span",{class:"last-update","data-toggle":"tooltip","data-placement":"top",title:e.options?.lastUpdateDate}," Updated "+c(e.fmt?.date(e.options?.lastUpdateDate)),9,rT)])],2),[[G,e.files?.length]]),E(s("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[G,e.files?.length&&!e.sidebarCollapsed]]),s("div",iT,[s("div",aT,[s("ol",lT,[(l(!0),d(Y,null,oe(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,dT))),256))]),s("div",uT,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[10]||(t[10]=[s("i",{class:"far fa-edit"},null,-1),s("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,cT)):m("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:O(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[11]||(t[11]=s("i",{class:"fab fa-js"},null,-1)),s("span",pT,c(e.allowScripts?"JS on":"JS off"),1)],2)):m("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[s("i",{class:O(["fas",e.showSource?"fa-eye":"fa-code"])},null,2),s("span",fT,c(e.showSource?"Rendered":"Source"),1)])):m("v-if",!0),E(s("a",{target:"_self",class:"btn btn-sm","aria-label":"View raw current file",title:"View the raw content of the current file",href:e.safeUrl(e.url)},[...t[12]||(t[12]=[s("i",{class:"fas fa-file-alt"},null,-1),s("span",{class:"d-none d-md-inline"}," Raw",-1)])],8,mT),[[G,e.content!=null]]),E(s("a",{target:"_self",class:"btn btn-sm","aria-label":"Download current file",title:"Download the current file",href:e.safeUrl(e.url+"&download=true")},[...t[13]||(t[13]=[s("i",{class:"fas fa-download"},null,-1),s("span",{class:"d-none d-md-inline"}," Download",-1)])],8,hT),[[G,e.content!=null]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm","aria-label":"Download full repository as ZIP",title:"Download the full repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[14]||(t[14]=[s("i",{class:"fas fa-file-archive"},null,-1),s("span",{class:"d-none d-md-inline"}," Full repo ZIP",-1)])],8,vT)):m("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[15]||(t[15]=[s("i",{class:"fas fa-globe"},null,-1),s("span",{class:"d-none d-md-inline"}," Website",-1)])],8,yT)):m("v-if",!0)])]),s("div",gT,[De(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var bT={class:"paper-faq"};function ll(e,t){return l(),d("div",bT,[...t[0]||(t[0]=[Ee('If something's missing, write to us \u2014 report a bug on GitHub.
The anonymous mirror you\u2019re looking for has expired, been removed by its owner, or never existed. If you received this URL from an author, ask them to re-issue it.
Fill in the details \u2014 it only takes a minute.
Take ownership of an existing anonymized repository so it appears on your dashboard.
',3)),s("div",bN,[t[5]||(t[5]=s("p",{class:"paper-section-copy"},"Use this when an anonymization was created by a co-author or from another account. You must have access to the GitHub repository it was made from.",-1)),E((l(),d("form",{class:"form needs-validation",name:"claimForm",novalidate:"",onSubmit:t[0]||(t[0]=we(n=>e.submitForm(n,()=>{e.claim()}),["prevent"]))},[s("div",wN,[t[1]||(t[1]=s("label",{class:"paper-field-label",for:"repoUrl"},"GitHub repository URL",-1)),E(s("input",{type:"text",class:O(["form-control",{"is-invalid":e.claimForm?.repoUrl?.invalid&&(e.claimForm?.repoUrl?.touched||e.claimForm?.submitted)}]),name:"repoUrl",id:"repoUrl",required:""},null,2),[[o,{state:e.viewState,set:n=>{e.repoUrl=n},value:e.repoUrl,form:"claimForm",options:{}}]]),E(s("div",kN," No anonymization matches this repository and ID. Check both values and that you can access the repository on GitHub. ",512),[[G,e.claimForm?.repoUrl?.errors?.not_found]])]),s("div",_N,[t[2]||(t[2]=s("label",{class:"paper-field-label",for:"repoId"},"Anonymized repository ID",-1)),E(s("input",{type:"text",class:O(["form-control",{"is-invalid":e.claimForm?.repoId?.invalid&&(e.claimForm?.repoId?.touched||e.claimForm?.submitted)}]),name:"repoId",id:"repoId",required:""},null,2),[[o,{state:e.viewState,set:n=>{e.repoId=n},value:e.repoId,form:"claimForm",options:{}}]]),t[3]||(t[3]=s("small",{id:"idHelp",class:"form-text text-muted"},[y("The ID is the last part of the anonymized URL: "),s("code",null,"anonymous.4open.science/r/Group anonymizations by venue, give chairs a shared dashboard, and set one expiry for every submission.
Every repository, pull request, and gist you\u2019ve mirrored, with live status and stats.
Manage GitHub connections and read-only access
',3)),m(" Quota "),e.quota?(l(),d("div",tD,[(l(),d(Y,null,oe([{key:"repository",label:"Repositories",kind:"count"},{key:"storage",label:"Storage",kind:"bytes"},{key:"file",label:"Files",kind:"count"}],(n,i)=>s("div",sD,[s("div",nD,[s("span",oD,c(n?.label),1),n?.kind==="count"?(l(),d("span",rD,[y(c(e.fmt?.number(e.quota[n?.key].used)),1),e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("span",iD," / "+c(e.fmt?.number(e.quota[n?.key].total)),1)),e.quota[n?.key].unlimited?(l(),d("span",aD,"Unlimited")):m("v-if",!0)])):m("v-if",!0),n?.kind==="bytes"?(l(),d("span",lD,[y(c(e.fmt?.humanFileSize(e.quota[n?.key].used)),1),e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("span",dD," / "+c(e.fmt?.humanFileSize(e.quota[n?.key].total)),1)),e.quota[n?.key].unlimited?(l(),d("span",uD,"Unlimited")):m("v-if",!0)])):m("v-if",!0)]),s("div",{class:O(["quota-track","quota-"+e.quota[n?.key].level]),role:"progressbar","aria-valuemin":"0","aria-label":n?.label+" quota","aria-valuenow":e.quota[n?.key].used,"aria-valuemax":e.quota[n?.key].unlimited?e.quota[n?.key].used:e.quota[n?.key].total,"aria-valuetext":e.quota[n?.key].unlimited?"unlimited":e.fmt.number(e.quota[n?.key].percent,0)+"% used"},[e.quota[n?.key].unlimited?m("v-if",!0):(l(),d("div",{key:0,class:"quota-fill",style:Ve({width:e.quota[n?.key].percent+"%"})},null,4))],10,cD)])),64))])):m("v-if",!0),m(" Search + filters "),E((l(),d("form",{class:"w-100 dashboard-filter-row","aria-label":"Filter anonymizations","accept-charset":"UTF-8",onSubmit:t[5]||(t[5]=we(n=>e.submitForm(n,()=>{n.preventDefault()}),["prevent"]))},[s("div",pD,[E(s("input",fD,null,512),[[o,{state:e.viewState,set:n=>{e.search=n},value:e.search,form:null,options:{}}]])]),s("div",mD,[s("div",hD,[s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="all"}]),onClick:t[0]||(t[0]=n=>e.typeFilter="all"),"aria-pressed":e.typeFilter==="all"},"All",10,vD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="repo"}]),onClick:t[1]||(t[1]=n=>e.typeFilter="repo"),"aria-pressed":e.typeFilter==="repo"},"Repos",10,yD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="pr"}]),onClick:t[2]||(t[2]=n=>e.typeFilter="pr"),"aria-pressed":e.typeFilter==="pr"},"PRs",10,gD),s("button",{type:"button",class:O(["btn",{"btn-primary":e.typeFilter==="gist"}]),onClick:t[3]||(t[3]=n=>e.typeFilter="gist"),"aria-pressed":e.typeFilter==="gist"},"Gists",10,bD)]),s("div",wD,[s("button",kD,[t[12]||(t[12]=s("span",{class:"filter-btn-label"},"Sort",-1)),s("span",_D,c(e.sortLabel()),1),s("i",{class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2),s("span",ED,c(e.sortDesc()?"descending":"ascending"),1)]),s("div",CD,[t[14]||(t[14]=s("h6",{class:"dropdown-header"},"Order by",-1)),(l(!0),d(Y,null,oe(e.sortFields,(n,i,a)=>(l(),d("div",ND,[s("input",{class:"form-check-input",type:"radio",name:"sort",onClick:u=>e.setSort(i,n.defaultDesc),checked:e.isSortedBy(i),id:"sort-"+a},null,8,SD),s("label",{class:"form-check-label",for:"sort-"+a},c(n?.label),9,DD)]))),256)),t[15]||(t[15]=s("div",{class:"dropdown-divider"},null,-1)),s("button",{type:"button",class:"dropdown-item",onClick:t[4]||(t[4]=n=>e.toggleSortDirection())},[t[13]||(t[13]=s("i",{class:"fas fa-exchange-alt fa-rotate-90","aria-hidden":"true"},null,-1)),y(" "+c(e.sortDesc()?"Switch to ascending":"Switch to descending"),1)])])]),s("div",RD,[s("button",TD,[t[16]||(t[16]=s("span",{class:"filter-btn-label"},"Status",-1)),e.hasHiddenStatus()?m("v-if",!0):(l(),d("span",OD,"All")),e.hasHiddenStatus()?(l(),d("span",AD,c(e.hiddenStatusCount())+" hidden",1)):m("v-if",!0)]),s("div",ID,[t[17]||(t[17]=s("h6",{class:"dropdown-header"},"Show statuses",-1)),(l(!0),d(Y,null,oe(e.statusKeyLabels,(n,i,a)=>(l(),d("div",VD,[E(s("input",{class:"form-check-input",type:"checkbox",id:"status-"+i},null,8,PD),[[o,{state:e.viewState,set:u=>{e.filters.status[i]=u},value:e.filters?.status[i],form:null,options:{}}]]),s("label",{class:"form-check-label",for:"status-"+i},c(n),9,qD)]))),256))])])])],32)),[[r,e.viewState]]),m(" Result count + active filter chips "),e.loading?m("v-if",!0):(l(),d("div",MD,[s("span",$D,[e.filteredItems?.length===e.items?.length?(l(),d("span",LD,[y(c(e.fmt?.number(e.items?.length))+" anonymization",1),e.items?.length!==1?(l(),d("span",FD,"s")):m("v-if",!0)])):m("v-if",!0),e.filteredItems?.length!==e.items?.length?(l(),d("span",UD,c(e.fmt?.number(e.filteredItems?.length))+" of "+c(e.fmt?.number(e.items?.length))+" shown",1)):m("v-if",!0)]),(l(!0),d(Y,null,oe(e.filters?.status,(n,i,a)=>(l(),d(Y,null,[n===!1?(l(),d("span",zD,[y(" Hiding "+c(e.statusKeyLabels[i])+" ",1),s("button",{type:"button",class:"filter-chip-close",onClick:u=>{e.filters.status[i]=!0},"aria-label":"Show "+e.statusKeyLabels[i]+" again"},"\xD7",8,HD)])):m("v-if",!0)],64))),256)),e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn-link-inline",onClick:t[6]||(t[6]=n=>e.clearFilters())},"Clear filters")):m("v-if",!0)]))]),m(" Table "),s("div",{class:"paper-table paper-table-dashboard w-100",role:"table","aria-label":"Anonymizations","aria-busy":e.loading},[s("div",GD,[s("div",{role:"columnheader","aria-sort":e.isSortedBy("_name")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("_name")}]),onClick:t[7]||(t[7]=n=>e.setSort("_name"))},[t[19]||(t[19]=y(" Anonymization ",-1)),e.isSortedBy("_name")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,jD),s("div",{role:"columnheader","aria-sort":e.isSortedBy("status")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("status")}]),onClick:t[8]||(t[8]=n=>e.setSort("status"))},[t[20]||(t[20]=y(" Status ",-1)),e.isSortedBy("status")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,WD),s("div",{role:"columnheader",class:"num","aria-sort":e.isSortedBy("pageView")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("pageView")}]),onClick:t[9]||(t[9]=n=>e.setSort("pageView"))},[t[21]||(t[21]=y(" Views ",-1)),e.isSortedBy("pageView")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,KD),s("div",{role:"columnheader","aria-sort":e.isSortedBy("options.expirationDate")?e.sortDesc()?"descending":"ascending":"none"},[s("button",{type:"button",class:O(["sortable",{active:e.isSortedBy("options.expirationDate")}]),onClick:t[10]||(t[10]=n=>e.setSort("options.expirationDate"))},[t[22]||(t[22]=y(" Expires ",-1)),e.isSortedBy("options.expirationDate")?(l(),d("i",{key:0,class:O(["fas",e.sortDesc()?"fa-arrow-down":"fa-arrow-up"]),"aria-hidden":"true"},null,2)):m("v-if",!0)],2)],8,YD),t[23]||(t[23]=s("div",{role:"columnheader"},[s("span",{class:"sr-only"},"Actions")],-1))]),m(" Loading skeleton: keeps the layout stable while the three lists load "),(l(),d(Y,null,oe([1,2,3,4],(n,i)=>(l(),d(Y,null,[e.loading?(l(),d("div",JD,[...t[24]||(t[24]=[s("div",{class:"cell-anon",role:"cell"},[s("span",{class:"skeleton skeleton-badge"}),s("div",{class:"anon-text"},[s("span",{class:"skeleton skeleton-line",style:{width:"38%"}}),s("span",{class:"skeleton skeleton-line skeleton-line-sm",style:{width:"56%"}})])],-1),s("div",{class:"cell-status",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"60%"}})],-1),s("div",{class:"cell-views num",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"40%"}})],-1),s("div",{class:"cell-expires",role:"cell"},[s("span",{class:"skeleton skeleton-line",style:{width:"55%"}})],-1),s("div",{class:"cell-actions",role:"cell"},null,-1)])])):m("v-if",!0)],64))),64)),(l(!0),d(Y,null,oe(e.filteredItems,(n,i)=>(l(),d(Y,{key:n?._type+":"+(n?._id||i)},[e.loading?m("v-if",!0):(l(),d("div",{key:0,class:O(["paper-table-row",{"repo-inactive":n?._statusKey=="expired"||n?._statusKey=="removed","repo-error":n?.status=="error","row-clickable":!!n?._viewUrl}]),role:"row",onClick:a=>e.openItem(n,a)},[s("div",xD,[s("span",{class:O(["type-badge",{"type-repo":n?._type==="repo","type-pr":n?._type==="pr","type-gist":n?._type==="gist"}])},c(n?._type==="repo"?"Repo":n?._type==="pr"?"PR":"Gist"),3),s("div",XD,[s("div",ZD,[n?._viewUrl?(l(),d("a",{key:0,class:"repo-name",textContent:c(n?._name),href:e.safeUrl(n?._viewUrl)},null,8,eR)):m("v-if",!0),n?._viewUrl?m("v-if",!0):(l(),d("span",{key:1,class:"repo-name repo-name-static",textContent:c(n?._name)},null,8,tR)),n?.role==="coauthor"?(l(),d("span",sR,"Co-author")):m("v-if",!0)]),!n?._broken||n?.conference?(l(),d("div",nR,[n?._type==="repo"&&n?.source?.fullName&&!n?._broken?(l(),d("span",oR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.fullName),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/")},null,8,rR),n?.options?.update&&n?.source?.branch?(l(),d("span",iR,[t[25]||(t[25]=y(" \xB7 ",-1)),s("a",{target:"_blank",rel:"noopener",textContent:c(n?.source?.branch),href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.branch)},null,8,aR)])):m("v-if",!0),n?.source?.commit?(l(),d("span",lR,[t[26]||(t[26]=y(" \xB7 ",-1)),s("a",{class:"commit-hash",target:"_blank",rel:"noopener",href:e.safeUrl("https://github.com/"+n?.source?.fullName+"/tree/"+n?.source?.commit)},"@"+c(n?.source?.commit?.substring(0,8)),9,dR)])):m("v-if",!0)])):m("v-if",!0),n?._type==="pr"&&n?.source?.repositoryFullName&&!n?._broken?(l(),d("span",uR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?._source),href:e.safeUrl("https://github.com/"+n?.source?.repositoryFullName+"/pull/"+n?.source?.pullRequestId)},null,8,cR)])):m("v-if",!0),n?._type==="gist"&&n?.source?.gistId&&!n?._broken?(l(),d("span",pR,[s("a",{target:"_blank",rel:"noopener",textContent:c(n?._source),href:e.safeUrl("https://gist.github.com/"+n?.source?.gistId)},null,8,fR)])):m("v-if",!0),n?.conference?(l(),d("span",{key:3,class:"cell-conf conf-tag",title:n?.conference},[t[27]||(t[27]=s("i",{class:"fas fa-university","aria-hidden":"true"},null,-1)),t[28]||(t[28]=y()),s("span",{textContent:c(n?.conference)},null,8,hR)],8,mR)):m("v-if",!0)])):m("v-if",!0)])]),s("div",vR,[s("div",yR,[s("span",{class:O(["status-dot","status-"+n?._statusKey]),"aria-hidden":"true"},null,2),s("span",{class:"status-word",textContent:c(e.fmt?.statusLabel(n?.status))},null,8,gR)]),n?.status=="error"&&n?.statusMessage?(l(),d("div",{key:0,class:"status-sub status-sub-error",textContent:c(e.fmt?.statusMsg(n?.statusMessage)),title:n?.statusMessage},null,8,bR)):m("v-if",!0),n?._stale?(l(),d("div",{key:1,class:"status-sub status-sub-warn",title:"Last activity "+e.fmt?.humanTime(n?.anonymizeDate||n?.lastView)}," Last activity "+c(e.fmt?.humanTime(n?.anonymizeDate||n?.lastView))+" \xB7 may be stuck ",9,wR)):m("v-if",!0),n?.status!="error"&&!n?._stale&&n?.anonymizeDate?(l(),d("div",kR," anonymized "+c(e.fmt?.humanTime(n?.anonymizeDate)),1)):m("v-if",!0)]),s("div",{class:"cell-views num",role:"cell",textContent:c(e.fmt?.number(n?.pageView))},null,8,_R),s("div",ER,[n?._expiry?.kind==="never"?(l(),d("span",CR,"Never")):m("v-if",!0),n?._expiry?.kind==="date"?(l(),d("span",{key:1,textContent:c(e.fmt?.humanTime(n?._expiry?.date))},null,8,NR)):m("v-if",!0),n?._expiry?.kind==="expired"&&n?._expiry?.date?(l(),d("span",SR,"Expired "+c(e.fmt?.humanTime(n?._expiry?.date)),1)):m("v-if",!0),n?._expiry?.kind==="expired"&&!n?._expiry?.date?(l(),d("span",DR,"Expired")):m("v-if",!0),n?._expiry?.kind==="none"?(l(),d("span",RR,"\u2014")):m("v-if",!0)]),s("div",TR,[n?._broken?m("v-if",!0):(l(),d("div",OR,[s("button",{class:"btn btn-icon-dots",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"Actions for "+n?._name},[...t[29]||(t[29]=[s("i",{class:"fas fa-ellipsis-h","aria-hidden":"true"},null,-1)])],8,AR),s("div",IR,[s("a",{class:"dropdown-item",href:e.safeUrl(n?._viewUrl)},[...t[30]||(t[30]=[s("i",{class:"fa fa-eye","aria-hidden":"true"},null,-1),y(" View ",-1)])],8,VR),n?._type==="repo"&&n?.options?.page&&n?.status=="ready"?(l(),d("a",{key:0,class:"dropdown-item",target:"_self",href:e.safeUrl("/w/"+n?.repoId+"/")},[...t[31]||(t[31]=[s("i",{class:"fas fa-globe","aria-hidden":"true"},null,-1),y(" View page ",-1)])],8,PR)):m("v-if",!0),s("a",{class:"dropdown-item",href:e.safeUrl(n?._editUrl)},[...t[32]||(t[32]=[s("i",{class:"far fa-edit","aria-hidden":"true"},null,-1),y(" Edit ",-1)])],8,qR),n?.status=="ready"||n?.status=="error"?(l(),d("button",{key:1,type:"button",class:"dropdown-item",onClick:a=>e.refreshItem(n)},[...t[33]||(t[33]=[s("i",{class:"fas fa-sync","aria-hidden":"true"},null,-1),y(" Force update ",-1)])],8,MR)):m("v-if",!0),n?.status=="removed"?(l(),d("button",{key:2,type:"button",class:"dropdown-item",onClick:a=>e.refreshItem(n)},[...t[34]||(t[34]=[s("i",{class:"fas fa-check-circle","aria-hidden":"true"},null,-1),y(" Enable ",-1)])],8,$R)):m("v-if",!0),n?.status=="expired"?(l(),d("button",{key:3,type:"button",class:"dropdown-item",onClick:a=>e.extendItem(n)},[...t[35]||(t[35]=[s("i",{class:"fas fa-calendar-plus","aria-hidden":"true"},null,-1),y(" Extend 6 months ",-1)])],8,LR)):m("v-if",!0),(n?.status=="ready"||n?.status=="expired"||n?.status=="error")&&n?.role!=="coauthor"?(l(),d("div",FR,[t[37]||(t[37]=s("div",{class:"dropdown-divider"},null,-1)),s("button",{type:"button",class:"dropdown-item dropdown-item-danger",onClick:a=>e.removeItem(n)},[...t[36]||(t[36]=[s("i",{class:"fas fa-trash-alt","aria-hidden":"true"},null,-1),y(" Remove ",-1)])],8,UR)])):m("v-if",!0)])]))])],10,QD))],64))),128)),!e.loading&&e.filteredItems?.length==0?(l(),d("div",zR,[t[39]||(t[39]=s("i",{class:"fas fa-inbox","aria-hidden":"true"},null,-1)),e.items?.length==0?(l(),d("span",HR,"You have no anonymizations yet.")):m("v-if",!0),e.items?.length>0?(l(),d("span",BR,"Nothing matches the current filters.")):m("v-if",!0),s("div",GR,[e.hasActiveFilters()?(l(),d("button",{key:0,type:"button",class:"btn btn-outline-ink",onClick:t[11]||(t[11]=n=>e.clearFilters())},"Clear filters")):m("v-if",!0),e.items?.length==0?(l(),d("a",jR,[...t[38]||(t[38]=[s("i",{class:"fa fa-plus-circle mr-1","aria-hidden":"true"},null,-1),y(" New anonymization",-1)])])):m("v-if",!0)])])):m("v-if",!0)],8,BD)])])}var WR={class:"explorer-page"},KR=["aria-label"],YR=["textContent"],JR={class:"leftCol-head"},QR={class:"leftCol-search"},xR={class:"tree-search-box"},XR={type:"text",class:"tree-search-input",placeholder:"Search files","aria-label":"Search files"},ZR={class:"leftCol-project-header"},eT=["textContent"],tT={class:"project-file-count"},sT={class:"leftCol-body"},nT={key:0,class:"paper-inline-warning",role:"alert"},oT={key:1,class:"paper-inline-warning",role:"alert"},rT={class:"leftCol-foot"},iT=["title"],aT={class:"explorer-main"},lT={class:"status-bar"},dT={class:"breadcrumb paths","aria-label":"Path"},uT=["textContent"],cT={class:"status-bar-actions"},pT=["href"],fT={class:"d-none d-md-inline"},mT={class:"d-none d-md-inline"},hT=["href"],vT=["href"],yT=["href"],gT=["href"],bT={class:"explorer-content"};function al(e,t){let o=et("tree"),r=et("partial-view"),n=be("field");return l(),d("div",WR,[E(s("button",{class:"sidebar-toggle",onClick:t[0]||(t[0]=i=>e.sidebarCollapsed=!e.sidebarCollapsed),"aria-label":e.sidebarCollapsed?"Show files":"Hide files"},[s("i",{class:O(["fas",e.sidebarCollapsed?"fa-folder-open":"fa-times"])},null,2),s("span",{textContent:c(e.sidebarCollapsed?"Files":"Close")},null,8,YR)],8,KR),[[G,e.files?.length]]),E(s("div",{class:O(["leftCol",{collapsed:e.sidebarCollapsed}])},[s("div",JR,[t[7]||(t[7]=s("span",{class:"leftCol-eyebrow"},"Files",-1)),s("button",{class:"leftCol-close","aria-label":"Close files",onClick:t[1]||(t[1]=i=>e.sidebarCollapsed=!0)},[...t[6]||(t[6]=[s("i",{class:"fas fa-times"},null,-1)])])]),s("div",QR,[s("div",xR,[s("i",{class:O(["fas tree-search-icon",e.fileSearchLoading?"fa-spinner fa-spin":"fa-search"])},null,2),E(s("input",XR,null,512),[[n,{state:e.viewState,set:i=>{e.fileSearchQuery=i},value:e.fileSearchQuery,form:null,options:{debounce:300},change:()=>{e.onFileSearchChange()}}]]),E(s("kbd",{class:"tree-search-kbd"},c(e.isMac?"\u2318":"Ctrl+")+"K",513),[[G,!e.fileSearchQuery]]),E(s("button",{class:"tree-search-clear","aria-label":"Clear search",onClick:t[2]||(t[2]=i=>{e.fileSearchQuery="",e.onFileSearchChange()})},"\xD7",512),[[G,e.fileSearchQuery]])])]),s("div",ZR,[s("span",{class:"project-name",textContent:c(e.repoId)},null,8,eT),s("span",tT,c(e.fileCounts?.[""]||e.files?.length)+" files",1)]),s("div",sT,[e.options?.truncatedFolders?.length>0?(l(),d("div",nT,[t[8]||(t[8]=s("i",{class:"fas fa-exclamation-triangle"},null,-1)),y(" "+c(e.fmt?.translate("WARNINGS.repo_truncated")),1)])):m("v-if",!0),e.options?.hasSubmodules?(l(),d("div",oT,[t[9]||(t[9]=s("i",{class:"fas fa-exclamation-triangle"},null,-1)),y(" "+c(e.fmt?.translate("WARNINGS.submodules_not_included")),1)])):m("v-if",!0),De(o,{class:"files",file:e.files,"search-query":e.fileSearchQuery,"search-results":e.fileSearchResults,page:e.viewState},null,8,["file","search-query","search-results","page"])]),s("div",rT,[s("span",{class:"last-update","data-toggle":"tooltip","data-placement":"top",title:e.options?.lastUpdateDate}," Updated "+c(e.fmt?.date(e.options?.lastUpdateDate)),9,iT)])],2),[[G,e.files?.length]]),E(s("div",{class:"leftCol-backdrop",onClick:t[3]||(t[3]=i=>e.sidebarCollapsed=!0)},null,512),[[G,e.files?.length&&!e.sidebarCollapsed]]),s("div",aT,[s("div",lT,[s("ol",dT,[(l(!0),d(Y,null,oe(e.paths,(i,a)=>(l(),d("li",{class:"breadcrumb-item",textContent:c(i)},null,8,uT))),256))]),s("div",cT,[e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:0,class:"btn btn-sm","aria-label":"Edit",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[10]||(t[10]=[s("i",{class:"far fa-edit"},null,-1),s("span",{class:"d-none d-md-inline"}," Edit",-1)])],8,pT)):m("v-if",!0),e.type=="html-doc"&&!e.showSource?(l(),d("button",{key:1,class:O(["btn btn-sm",{"btn-active":e.allowScripts}]),"aria-label":"Allow this document to run JavaScript",title:"Scripts in this file are blocked by default. Enable them only if you trust the repository \u2014 the document stays isolated from your session either way.",onClick:t[4]||(t[4]=i=>e.toggleAllowScripts())},[t[11]||(t[11]=s("i",{class:"fab fa-js"},null,-1)),s("span",fT,c(e.allowScripts?"JS on":"JS off"),1)],2)):m("v-if",!0),e.type=="html-doc"?(l(),d("button",{key:2,class:"btn btn-sm","aria-label":"Toggle between the rendered document and its source",title:"Toggle between the rendered document and its source",onClick:t[5]||(t[5]=i=>e.toggleSource())},[s("i",{class:O(["fas",e.showSource?"fa-eye":"fa-code"])},null,2),s("span",mT,c(e.showSource?"Rendered":"Source"),1)])):m("v-if",!0),E(s("a",{target:"_self",class:"btn btn-sm","aria-label":"View raw current file",title:"View the raw content of the current file",href:e.safeUrl(e.url)},[...t[12]||(t[12]=[s("i",{class:"fas fa-file-alt"},null,-1),s("span",{class:"d-none d-md-inline"}," Raw",-1)])],8,hT),[[G,e.content!=null]]),E(s("a",{target:"_self",class:"btn btn-sm","aria-label":"Download current file",title:"Download the current file",href:e.safeUrl(e.url+"&download=true")},[...t[13]||(t[13]=[s("i",{class:"fas fa-download"},null,-1),s("span",{class:"d-none d-md-inline"}," Download",-1)])],8,vT),[[G,e.content!=null]]),e.options?.download?(l(),d("a",{key:3,target:"_self",class:"btn btn-sm","aria-label":"Download full repository as ZIP",title:"Download the full repository as a ZIP archive",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[14]||(t[14]=[s("i",{class:"fas fa-file-archive"},null,-1),s("span",{class:"d-none d-md-inline"}," Full repo ZIP",-1)])],8,yT)):m("v-if",!0),e.options?.hasWebsite?(l(),d("a",{key:4,target:"_self",class:"btn btn-sm","aria-label":"Website",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[15]||(t[15]=[s("i",{class:"fas fa-globe"},null,-1),s("span",{class:"d-none d-md-inline"}," Website",-1)])],8,gT)):m("v-if",!0)])]),s("div",bT,[De(r,{name:"partials/pageView.htm",state:e.viewState},null,8,["state"])])])])}var wT={class:"paper-faq"};function ll(e,t){return l(),d("div",wT,[...t[0]||(t[0]=[Ee('If something's missing, write to us \u2014 report a bug on GitHub.

GitHub's OAuth scopes have no read-only option for private repositories. Anonymous GitHub only ever reads your repositories; it never pushes, modifies, or deletes anything.
Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Everything passes through the same redaction filter.
You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.
Track PR mirrors you\u2019ve created and their reviewer traffic.

GitHub's OAuth scopes have no read-only option for private repositories. Anonymous GitHub only ever reads your repositories; it never pushes, modifies, or deletes anything.
Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Everything passes through the same redaction filter.
You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over.
Track PR mirrors you\u2019ve created and their reviewer traffic.
Defaults applied to every new anonymization, your quotas, and your account.
',3)),s("div",AV,[E((l(),d("aside",IV,[...t[2]||(t[2]=[Ee('A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee.
Collaborate by implementing new features and fixing bugs. Help with new file formats or deployment is welcome.
Open on GitHubTell us about bugs and missing features in Anonymous GitHub itself. Questions about an anonymized repository go to its authors.
File an issueServer costs hover around $25 a month. Any contribution helps keep the lights on.
GitHub Sponsors| '+(u.oldNo||"")+' | '+(u.newNo||"")+' | '+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+' | '+t(u.text)+" |
r[n])}function eq(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var El={ERRORS:{repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"Unknown error, contact the admin.",unreachable:"Anonymous GitHub is unreachable, contact the admin.",request_error:"Unable to download the file, check your connection or contact the admin.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"The repository was not found on GitHub. Check the URL and spelling, make sure you are signed in to the account that can see it, and confirm the repo isn't hidden under an org that restricts third-party app access.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",no_file_selected:"Please select a file.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"Your GitHub access token has expired. Please log out and log in again to refresh it.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"This username belongs to an existing account. Sign in to that account before connecting GitHub.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"This repository uses git submodules. Submodule contents are not included in the anonymized repository and appear as empty folders."}};var Cl={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=Xe(null);return It(()=>{let r=[t.value][0];r.classList.add("html-doc");function n(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let p="";e.baseUrl&&(p=' Defaults applied to every new anonymization, your quotas, and your account. A small team keeps this running. If it helps you, please consider contributing back \u2014 in code, ideas, or coffee. Collaborate by implementing new features and fixing bugs. Help with new file formats or deployment is welcome. Tell us about bugs and missing features in Anonymous GitHub itself. Questions about an anonymized repository go to its authors. Server costs hover around $25 a month. Any contribution helps keep the lights on.Your settings
| '+(u.oldNo||"")+' | '+(u.newNo||"")+' | '+(u.kind==="add"?"+":u.kind==="remove"?"-":u.kind==="hunk"?"@":"")+' | '+t(u.text)+" |
r[n])}function tq(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var El={ERRORS:{repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"Unknown error, contact the admin.",unreachable:"Anonymous GitHub is unreachable, contact the admin.",request_error:"Unable to download the file, check your connection or contact the admin.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"The repository was not found on GitHub. Check the URL and spelling, make sure you are signed in to the account that can see it, and confirm the repo isn't hidden under an org that restricts third-party app access.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please try again shortly.",pull_request_not_available:"This pull request is currently not available.",invalid_pullRequestId:"The pull request ID is invalid.",pullRequestId_already_used:"This pull request ID is already in use. Please choose a different one.",repository_not_specified:"A repository must be specified for this pull request.",pullRequestId_not_specified:"A pull request ID must be specified.",pullRequestId_is_not_a_number:"The source pull request ID must be a number.",options_not_provided:"Anonymization options are mandatory.",terms_not_specified:"Anonymization terms must be specified.",invalid_terms_format:"Terms are in an invalid format.",missing_content:"No content was provided to the anonymization preview.",unable_to_anonymize:"An error happened during the anonymization process. Please try later or report the issue.",non_supported_mode:"The selected anonymization mode is invalid, only download and stream are supported.",invalid_path:"The provided path is invalid or missing.",path_not_specified:"A file path must be specified.",path_not_defined:"The file path has not been resolved yet.",invalid_file_path:"The requested file path is not valid.",invalid_request:"The request is missing required fields or is malformed.",no_file_selected:"Please select a file.",file_not_found:"The requested file is not found.",file_not_accessible:"The requested file is not accessible.",file_not_supported:"The file type is not supported. Anonymous GitHub cannot handle it.",file_too_big:"The file size exceeds the limit of Anonymous GitHub.",is_folder:"The path points to a folder.",folder_not_supported:"The path points to a folder. Please select a file.",unable_to_write_file:"Unable to write file on disk.",download_not_enabled:"Repository downloads are not enabled on this server.",unable_to_download:"The repository could not be downloaded. Please try again later.",s3_config_not_provided:"Object storage has not been configured on this server.",stats_unsupported:"Statistics are only supported in download mode.",branches_not_found:"The requested branch is not found.",readme_not_available:"No README for the repository is found.",page_not_supported_on_different_branch:"GitHub Pages is served from a different branch than the one selected. Pick the branch that GitHub Pages is configured to use.",page_not_activated:"GitHub Pages is not enabled on this repository. Enable it in the repository settings on GitHub before anonymizing.",is_removed:"This resource has been removed and is no longer available.",conf_name_missing:"A conference name is required.",conf_id_missing:"A conference ID is required.",conf_id_used:"This conference ID is already in use. Please choose a different one.",conf_start_date_missing:"A start date is required for the conference.",conf_end_date_missing:"An end date is required for the conference.",conf_start_date_invalid:"The start date must be before the end date.",conf_end_date_invalid:"The end date must be in the future.",invalid_plan:"The selected plan is not valid.",conference_not_found:"The requested conference could not be found.",conf_not_found:"The requested conference could not be found.",conf_not_activated:"The conference is not activated.",billing_missing:"Billing information is required for this plan.",billing_name_missing:"A billing name is required.",billing_email_missing:"A billing email is required.",billing_address_missing:"A billing address is required.",billing_city_missing:"A billing city is required.",billing_zip_missing:"A billing ZIP/postal code is required.",billing_country_missing:"A billing country is required.",queue_not_found:"The specified queue could not be found.",job_not_found:"The specified job could not be found in the queue.",error_retrying_job:"An error occurred while retrying the job.",gist_expired:"The gist is expired.",gist_not_ready:"Anonymous GitHub is still processing the gist, it can take several minutes.",gist_not_found:"The requested gist could not be found.",gist_not_available:"This gist is currently not available.",invalid_gistId:"The format of the gist ID is invalid.",gistId_not_specified:"A gist ID must be provided.",gistId_already_used:"The gist ID is already used.",missing_token:"An authentication token is required.",invalid_token:"The provided authentication token is invalid.",login_failed:"Login failed. Please try again.",server_error:"An unexpected server error occurred. Please try again later.",username_not_defined:"A username must be provided.",github_user_not_found:"The specified GitHub user could not be found.",cannot_coauthor_self:"You cannot add yourself as a co-author.",storage_write_size_mismatch:"The downloaded file was smaller than expected. The upstream source may have returned an incomplete response \u2014 please try again.",storage_read_error:"An error occurred while reading the file from storage \u2014 please try again.",upstream_error:"A temporary error occurred while fetching from GitHub \u2014 please try again.",token_expired:"Your GitHub access token has expired. Please log out and log in again to refresh it.",job_is_active:"This job is currently running \u2014 wait for it to finish or remove it first.",github_app_access_required:"Allow this repository on GitHub using the read-only access button, then retry. Organization access may require administrator approval.",github_app_reconnect_required:"Reconnect your GitHub App account to restore read-only access.",github_app_disabled:"New GitHub App connections are currently unavailable.",github_oauth_required:"Connect legacy GitHub OAuth to use this feature.",github_identity_mismatch:"Use the same GitHub account that you are signed in with here.",github_app_permissions_invalid:"The GitHub App must be configured with read-only permissions.",github_unavailable:"GitHub is temporarily unavailable. Please retry.",connection_changed:"The repository connection changed. Reload and try again.",repository_busy:"Wait for the repository operation to finish before changing its connection.",invalid_connection:"Select a supported GitHub connection.",github_oauth_disabled:"Legacy OAuth sign-in is currently disabled.",invalid_auth_state:"The authorization session expired. Please start again from Anonymous GitHub.",invalid_webhook_signature:"The webhook signature is invalid.",webhook_processing_failed:"Webhook processing failed. Retry the delivery.",github_app_authorization_cancelled:"GitHub authorization was cancelled.",github_account_link_required:"This username belongs to an existing account. Sign in with legacy GitHub OAuth to keep access to your existing anonymizations, then connect the read-only GitHub App from GitHub connections.",github_app_refresh_busy:"GitHub credentials are being renewed. Please retry shortly.",github_grant_revocation_failed:"Unable to revoke the GitHub grant. Please retry.",another_login_required:"Connect and verify another sign-in method before disconnecting OAuth.",oauth_resources_remaining:"Some resources still require OAuth. Migrate or remove them before disconnecting.",invalid_github_path:"The GitHub repository path is invalid."},WARNINGS:{page_not_enabled_on_repo:"GitHub Pages is not enabled on this repository. Enable it in the repository's Settings \u2192 Pages on GitHub, then refresh.",page_branch_mismatch:"GitHub Pages on this repository is served from the '{{pageBranch}}' branch, but you selected '{{selectedBranch}}'. Switch the branch above to '{{pageBranch}}' to anonymize the Pages site.",folder_truncated:"This folder has more than 10,000 entries; only a partial listing is shown.",repo_truncated:"Some folders in this repository have too many files to be fully listed. Affected folders are marked with a warning icon.",submodules_not_included:"This repository uses git submodules. Submodule contents are not included in the anonymized repository and appear as empty folders."}};var Cl={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=Xe(null);return It(()=>{let r=[t.value][0];r.classList.add("html-doc");function n(){r.innerHTML="";let i=e.content;if(typeof i!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let u=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&u.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",u.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),r.appendChild(a);let p="";e.baseUrl&&(p='