Merge pull request #927 from tdurieux/feat/ui-polish-2

feat(ui): polish from design review rounds 92-121
This commit is contained in:
Thomas Durieux authored and GitHub committed 2026-11-08 19:17:29 +01:00
commit 1983441c68
12 files changed
+376 -66

No files matched your search

+2 -2
View File
@@ -1,8 +1,8 @@
{
"core.min.js": "core.d23af1c652.min.js",
"vendor.min.js": "vendor.25b155fc95.min.js",
"vendor.min.js": "vendor.5444441cd0.min.js",
"mermaid.min.js": "mermaid.a7356d5ed1.min.js",
"all.min.css": "all.c7fb588ad2.min.css",
"all.min.css": "all.1387c04ed5.min.css",
"markdown.min.js": "markdown.6c8dfb7b1d.min.js",
"pdf.min.js": "pdf.4d9cc6ff49.min.js",
"notebook.min.js": "notebook.c3144c18ae.min.js",
+1 -1
View File
@@ -6,4 +6,4 @@
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unsLine truncated
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{contentLine truncated
*/.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{contentLine truncated
+267 -3
View File
@@ -8479,7 +8479,7 @@ input[type="date"], select { color-scheme: light; }
/* ===== Design refinements ===== */
/* One primary colour: accent for actions and progress; amber/red stay for states. */
.navbar .btn-signin, .navbar .btn-signin:hover { background: var(--accent); border-color: var(--accent); color: #fff !important; }
.dark-mode .navbar .btn-signin, .dark-mode .navbar .btn-signin:hover { color: #1A1815 !important; }
.dark-mode .navbar .btn-signin, .dark-mode .navbar .btn-signin:hover { background: #237A71; border-color: #237A71; color: #fff !important; }
.navbar .btn-signin:hover { filter: brightness(.94); }
.paper-progress .paper-progress-bar, .paper-progress.paper-progress-ready .paper-progress-bar { background: var(--accent); }
.paper-progress .paper-progress-label { font-family: var(--font-sans); font-size: 12px; letter-spacing: 0; text-transform: none; }
@@ -11371,8 +11371,7 @@ mark.md-find.is-current { background: rgba(232,160,30,.85) !important; box-shado
/* ===== Round 63: both find inputs on the toolbar edge; outline never jumps ===== */
@media (min-width: 768px) {
.md-find-bar { padding-left: 71px !important; }
.file-card .ace_search { overflow: visible !important; }
}
.file-card }
@media (min-width: 1200px) { .readme-toc, .file-card:has(.md-find-bar) .readme-toc { top: 120px !important; } }
/* dark: selected segment clearly lifted */
@@ -12094,3 +12093,268 @@ input::placeholder, textarea::placeholder, .form-control::placeholder, #sourceUr
.q-throughput { position: relative; }
.q-throughput .q-range-btns { position: absolute !important; top: 12px; right: 16px; float: none !important; margin: 0 !important; width: auto !important; display: inline-flex !important; z-index: 2; }
.anonymize-submit-bar .draft-status { order: -1; }
/* Round 93: dark outline contrast after later light overrides; stronger dark selected row */
.dark-mode .readme-toc a:not(.is-active) { color: #B8B1A6 !important; }
.dark-mode .readme-toc a.lvl-3:not(.is-active) { color: #A39C91 !important; }
.dark-mode .files .file.active > a { background: rgba(255,255,255,.13) !important; }
/* Round 94: selection fill distinct from redaction slots; gentler phone scroll cue */
.files .file.active > a { background: #EBE7E0 !important; }
.files .file.active > a .redact-slot { background: var(--slot-bg) !important; }
@media (max-width: 767px) {
.file-card.is-code.no-wrap .file-card-body::after { width: 28px !important; background: linear-gradient(to right, rgba(250,249,246,0) 0%, rgba(250,249,246,.85) 100%) !important; box-shadow: inset -1px 0 0 rgba(40,32,24,.16) !important; }
.dark-mode .file-card.is-code.no-wrap .file-card-body::after { background: linear-gradient(to right, rgba(20,19,17,0) 0%, rgba(20,19,17,.85) 100%) !important; box-shadow: inset -1px 0 0 rgba(255,255,255,.12) !important; }
}
/* Round 95: outline top aligns with the first heading; clearer dark sidebar depth; visible phone scroll cue */
@media (min-width: 1100px) { .readme-toc { margin-top: -54px !important; top: 84px !important; } }
.dark-mode .leftCol, .dark-mode .leftCol .leftCol-search { background: #1F1D1A !important; }
@media (max-width: 767px) {
.file-card.is-code.no-wrap .file-card-body::after { width: 32px !important; background: linear-gradient(to right, rgba(250,249,246,0) 0%, rgba(250,249,246,.75) 45%, rgba(236,232,225,.98) 100%) !important; box-shadow: inset -1px 0 0 rgba(40,32,24,.2) !important; }
.dark-mode .file-card.is-code.no-wrap .file-card-body::after { background: linear-gradient(to right, rgba(20,19,17,0) 0%, rgba(20,19,17,.75) 45%, rgba(38,35,31,.98) 100%) !important; box-shadow: inset -1px 0 0 rgba(255,255,255,.16) !important; }
}
/* Round 96: phone Sign in matches the primary teal action; readable FAQ help card */
@media (max-width: 991px) {
.navbar .nav-signin-m { display: inline-flex; align-items: center; gap: 6px; background: var(--accent) !important; border-color: var(--accent) !important; color: #fff !important; padding: 0 12px !important; font-weight: 500; }
.dark-mode .navbar .nav-signin-m { background: #237A71 !important; border-color: #237A71 !important; color: #fff !important; }
.navbar .nav-signin-m .fa-github { font-size: 15px; }
}
.paper-faq-help-card p { font-size: 14px !important; line-height: 1.55 !important; }
/* Round 97: larger hero product mock; even phone top-bar spacing */
@media (min-width: 1100px) { .paper-hero { grid-template-columns: minmax(0, 1fr) 500px !important; column-gap: 48px !important; } }
@media (max-width: 767px) { .viewer-bar .vb-right { gap: 8px !important; } .viewer-bar .vb-right > .vb-support, .viewer-bar .vb-right > .vb-icon { margin: 0 !important; } }
@media (min-width: 1100px) { .paper-reassure { flex-wrap: wrap !important; column-gap: 18px !important; row-gap: 6px !important; max-width: 100%; } .paper-reassure li { white-space: nowrap; } }
/* Round 98: one landing split: every two-column block starts its right column at the same x */
@media (min-width: 1100px) {
.paper-hero { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; column-gap: 20px !important; }
.paper-section-head { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; column-gap: 20px !important; }
.paper-section-head > p { max-width: 500px; }
}
/* Quieter dark slots with a brighter number */
.dark-mode { --slot-bg: #3D3833; --slot-num: #8FDACD; }
/* Sidebar search row centres on the same line as the file toolbar */
@media (min-width: 768px) { .leftCol-search, .explorer-page > .leftCol .leftCol-search { height: 53px !important; padding: 0 12px !important; display: flex !important; align-items: center !important; box-sizing: border-box; } .leftCol-search .tree-search-box { height: 36px !important; padding-top: 0 !important; padding-bottom: 0 !important; align-items: center; } .leftCol-search .search-zip { height: 36px !important; width: 36px !important; } }
/* Round 99: a clearer phone scroll cue; aligned FAQ help card */
@media (max-width: 767px) {
.file-card.is-code.no-wrap .file-card-body::after { width: 36px !important; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(250,249,246,.9) 55%, #ECE7DF 100%) !important; box-shadow: inset -2px 0 0 rgba(40,32,24,.18) !important; }
.dark-mode .file-card.is-code.no-wrap .file-card-body::after { background: linear-gradient(to right, rgba(20,19,17,0) 0%, rgba(20,19,17,.9) 55%, #2A2622 100%) !important; box-shadow: inset -2px 0 0 rgba(255,255,255,.18) !important; }
}
@media (min-width: 1100px) { .paper-faq-help-card { margin-top: 7px; } }
/* Round 100: toolbar swatch reads as the slot (edge + slightly darker); one Sign in treatment (filled teal) everywhere */
.meta-redact::before, .hero-mock-count::before, .mobile-sub b::before { background: #D9D1C3 !important; box-shadow: inset 0 0 0 1px rgba(40,32,24,.12) !important; }
.dark-mode .meta-redact::before, .dark-mode .hero-mock-count::before, .dark-mode .mobile-sub b::before { background: #4A443D !important; box-shadow: inset 0 0 0 1px rgba(255,255,255,.14) !important; }
.viewer-bar .vb-signin, .viewer-bar .vb-signin:hover { background: var(--accent) !important; color: #fff !important; box-shadow: none !important; border: 0 !important; }
.viewer-bar .vb-signin:hover { filter: brightness(.94); }
.dark-mode .viewer-bar .vb-signin, .dark-mode .viewer-bar .vb-signin:hover { background: #237A71 !important; color: #fff !important; }
/* Round 101: tighter, uniform landing rhythm; sticky FAQ teaser heading; stronger tertiary text */
@media (min-width: 992px) {
.paper-section-head, .paper-qa, .paper-features, .paper-stats { margin-top: 72px !important; }
.demo { margin-bottom: 0 !important; }
.paper-qa { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; column-gap: 20px !important; }
}
.ace-chrome .ace_gutter-cell { color: #57524A !important; }
.dark-mode .ace_editor .ace_gutter-cell { color: #ADA69B !important; }
.readme-toc a.lvl-3:not(.is-active) { color: #57524A !important; }
.dark-mode .readme-toc a.lvl-3:not(.is-active) { color: #ADA69B !important; }
.paper-stat-delta, .paper-stats small { color: #57524A !important; }
.nav-heart-m, .nav-heart-m:hover, .nav-heart-m:focus { background: transparent !important; box-shadow: none !important; border: 0 !important; }
@media (min-width: 992px) { .paper-section-head + .paper-features { margin-top: 32px !important; } }
@media (min-width: 1100px) { .paper-features { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; column-gap: 20px !important; } .paper-features > :first-child { padding-right: 28px; } }
@media (min-width: 1100px) { .fm-input-sm { width: 118px !important; } .fm-row { gap: 12px !important; } .fm-toggles { flex-wrap: nowrap !important; } }
/* Round 102: one height (32px) and one gap (8px) across the viewer bar's right cluster */
@media (min-width: 768px) {
.viewer-bar .vb-right { gap: 8px !important; }
.viewer-bar .vb-right > * { margin: 0 !important; }
.viewer-bar .vb-support, .viewer-bar .vb-help-btn, .viewer-bar .vb-icon, .viewer-bar .vb-signin { height: 32px !important; min-height: 32px !important; box-sizing: border-box; }
.viewer-bar .vb-icon { width: 32px !important; }
.viewer-bar .vb-snapshot { margin-right: 8px !important; }
}
/* Dark hero preview gets a lifted surface and a visible edge */
.dark-mode .hero-mock { background: #221F1C !important; box-shadow: 0 0 0 1px rgba(255,255,255,.1), 0 18px 40px -18px rgba(0,0,0,.7) !important; }
@media (min-width: 768px) { .viewer-bar .vb-right .vb-icon { width: 32px !important; height: 32px !important; } }
.pane-url .meta-redact { display: inline-flex; align-items: center; gap: 6px; font-family: inherit; }
/* Round 103: hairline between view tools and the file-action group; paired demo headers share one height; bolder selected file */
@media (min-width: 768px) {
.file-card-head .tb-file, .tb-file { margin-left: 16px !important; }
}
.demo-panes .pane-header { height: 40px !important; min-height: 40px !important; box-sizing: border-box; display: flex; align-items: center; padding-top: 0 !important; padding-bottom: 0 !important; }
.files .file.active > a .tree-name { font-weight: 500; color: var(--color); }
.files .file.active > a { background: #E8E3DB !important; }
/* Snapshot reads as passive metadata; softer dark selection; neutral tracking on small labels; 14px site nav */
.viewer-bar .vb-snapshot { font-size: 12px !important; color: var(--ink-soft) !important; gap: 5px !important; }
.dark-mode .files .file.active > a { background: rgba(255,255,255,.08) !important; }
.pane-label, .demo-terms label, .demo-terms .label, .fm-label { letter-spacing: 0 !important; }
@media (min-width: 992px) { .navbar .nav-link:not(.btn-signin) { font-size: 14px !important; } }
/* Round 104: shared active-outline style (teal text + rail); visible accordion chevrons; dark slot edge; 13px toolbar metadata */
.paper-faq-toc a.active { color: var(--accent) !important; font-weight: 500; }
.dark-mode .paper-faq-toc a.active { color: #7FCFC2 !important; }
.paper-features .paper-feature:not(.is-on) .paper-feature-tab::after, .paper-features .paper-feature.is-on .paper-feature-tab::after { border-color: #57524A !important; }
.dark-mode .paper-features .paper-feature .paper-feature-tab::after { border-color: #ADA69B !important; }
.paper-feature:not(.is-on) .paper-feature-tab:hover .paper-feature-title { color: var(--accent); }
.dark-mode .redact-chip, .dark-mode .redact-slot, .dark-mode .ace_redacted { box-shadow: inset 0 0 0 1px rgba(255,255,255,.1) !important; }
@media (min-width: 768px) { .file-card-meta { font-size: 13px !important; } }
@media (min-width: 768px) { .file-card-head .btn-goto { order: 1; } .file-card-head .btn-toggle { order: 2; } .file-card-head .btn-find { order: 3; } .file-card-head .tb-file { order: 4; } .file-card-head .tb-copy-m, .file-card-head .tb-more-btn { order: 5; } }
.leftCol-search .search-zip { width: auto !important; padding: 0 9px !important; gap: 4px; display: inline-flex !important; align-items: center; justify-content: center; }
.search-zip-label { font-size: 11px; font-weight: 600; letter-spacing: .02em; }
/* Round 106: find row spans the gutter; header labels share one weight; flush selection marker; dark hero mock depth; shared page lead */
.navbar .nav-support, .navbar .nav-support-inline { font-weight: 400 !important; color: var(--ink-soft) !important; }
.files .file.active > a::before { left: 0 !important; }
.dark-mode .hero-mock { border-color: #3A3631 !important; }
.dark-mode .hero-mock-side, .dark-mode .hero-mock .hm-side, .dark-mode .hero-mock-tree { background: #1E1C19 !important; }
.paper-faq-lede { font-size: 18px !important; line-height: 1.55 !important; }
/* Round 107: view tools share the file-action group's 32px box; legible search placeholder and footer line */
@media (min-width: 768px) { .file-card-actions > .btn-ghost.btn-icon-only, .file-card-actions > .btn-toggle { height: 32px !important; width: 32px !important; min-height: 32px !important; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; } }
.tree-search-input::placeholder { color: #6E685F !important; opacity: 1; }
.dark-mode .tree-search-input::placeholder { color: #9C958A !important; }
.tree-search-kbd { color: #57524A !important; }
.dark-mode .tree-search-kbd { color: #ADA69B !important; }
/* Footer link columns start on the landing page's shared axis (right half) */
@media (min-width: 1100px) { .paper-footer-inner { grid-template-columns: calc(50% - 10px) repeat(3, minmax(0, 1fr)) !important; column-gap: 20px !important; } .paper-footer-brand { max-width: 420px; } }
.ace_search_counter, .md-find-count, .find-count { font-variant-numeric: tabular-nums; }
.demo-panes .pane-label, .demo-panes .pane-url { font-size: 13px !important; }
.dark-mode .files .file.active > a { background: rgba(255,255,255,.1) !important; }
/* Round 108: landing slots sit on the same optical line as viewer slots; toolbar group icons at 16px */
.demo-output .redact-chip { vertical-align: -.16em !important; }
span.redact, .hero-mock .redact { vertical-align: -.12em !important; }
.tb-seg-icon .ui-icon { width: 16px !important; height: 16px !important; }
.files .file.active > a { background: #E3DDD2 !important; }
.files .file.active > a .redact-slot { background: #D0C7B7 !important; }
.file-card-actions > .btn-find.is-on { box-shadow: inset 0 0 0 1px rgba(31,106,100,.55) !important; border-color: transparent !important; }
/* Round 109: output card reads as the result; visible focus on the demo terms; README start anchor */
.demo-panes > :last-child .pane-header { background: #F3EFE8 !important; }
.dark-mode .demo-panes > :last-child .pane-header { background: #1F1C19 !important; }
.demo-terms input:focus, .demo-terms textarea:focus { outline: none !important; border-color: var(--accent) !important; box-shadow: 0 0 0 3px rgba(31,106,100,.18) !important; }
.markdown-body > h1:first-child { margin-top: 8px !important; margin-bottom: 24px !important; }
/* Phone README outline lives in the ⋯ menu */
.tb-menu-label { padding: 8px 14px 4px; font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: #57524A; }
.dark-mode .tb-menu-label { color: #ADA69B; }
.tb-menu .tb-menu-toc { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 280px; display: block; text-align: left; }
.tb-menu .tb-menu-toc.lvl-3 { padding-left: 28px !important; color: #57524A; }
.dark-mode .tb-menu .tb-menu-toc.lvl-3 { color: #ADA69B; }
/* Selection stays lighter than the redaction slot (slots are data, selection is chrome) */
.files .file.active > a { background: #ECE8E1 !important; }
.files .file.active > a .redact-slot { background: var(--slot-bg) !important; }
/* Round 110 */
.tb-menu { max-height: calc(100dvh - 120px); overflow-y: auto; overscroll-behavior: contain; }
.tb-menu .tb-menu-toc.is-active { color: var(--accent) !important; font-weight: 500; }
.dark-mode .tb-menu .tb-menu-toc.is-active { color: #7FCFC2 !important; }
.markdown-body > h1:first-child { margin-bottom: 18px !important; }
@media (max-width: 767px) { .markdown-body > h1:first-child { margin-top: 0 !important; margin-bottom: 14px !important; } }
.files .file.active > a { background: #E8E5DD !important; }
.tree-toggle::after { border-color: #7A746A !important; }
.dark-mode .tree-toggle::after { border-color: #8F887D !important; }
.dark-mode .hero-mock { box-shadow: inset 0 1px 0 rgba(255,255,255,.06), 0 0 0 1px rgba(255,255,255,.1), 0 18px 40px -18px rgba(0,0,0,.7) !important; background: #24211D !important; }
.paper-faq-lede { text-wrap: balance; max-width: 640px; }
.pane-edit-hint { font-weight: 400; color: #6E685F; }
.dark-mode .pane-edit-hint { color: #9C958A; }
.demo-panes > :first-child:hover, .demo-panes > :first-child:focus-within { border-color: #CFC7B9 !important; }
/* Round 111: phone menu hierarchy (actions > outline), wrapping outline items, scrim; shared card radius */
.tb-menu .tb-menu-toc { white-space: normal !important; font-size: 14px !important; line-height: 1.35; padding-top: 7px !important; padding-bottom: 7px !important; max-width: none !important; }
.tb-menu .tb-menu-toc.lvl-3 { padding-left: 24px !important; }
.tb-menu-note { font-size: 13px !important; color: #6E685F !important; }
.dark-mode .tb-menu-note { color: #9C958A !important; }
@media (max-width: 767px) { .tb-more:has(.tb-menu)::before { content: ""; position: fixed; inset: 0; background: rgba(26,24,21,.22); z-index: 40; } .tb-menu { z-index: 41 !important; } }
.paper-faq-help-card { border-radius: 12px !important; }
/* Phone home header mirrors the viewer bar: heart, theme, Sign in (32px), then the menu */
.nav-theme-m { display: none; }
@media (max-width: 991px) {
.nav-theme-m { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: 0; background: transparent; color: var(--ink-soft); padding: 0; margin-left: 2px; }
.nav-theme-m .ui-icon { width: 18px; height: 18px; }
.navbar .nav-signin-m { height: 32px !important; margin-left: 6px !important; }
.nav-heart-m + .nav-theme-m { margin-left: 2px; }
}
@media (max-width: 767px) { .viewer-bar .vb-signin { height: 32px !important; } }
/* Outline items share the action label column in the phone menu */
.tb-menu .tb-menu-toc.lvl-2 { padding-left: 42px !important; }
.tb-menu .tb-menu-toc.lvl-3 { padding-left: 58px !important; }
.tb-menu-label { padding-left: 42px !important; }
@media (max-width: 991px) { .navbar-collapse .nav-item:has(> .nav-icon) { display: none !important; } }
.tb-menu > button.tb-menu-toc, .file-card-head .tb-menu > button.tb-menu-toc { font-size: 14px !important; min-height: 36px !important; padding-top: 8px !important; padding-bottom: 8px !important; line-height: 1.35 !important; height: auto !important; }
.tb-menu > .tb-menu-label { padding-left: 40px !important; }
.tb-menu > button.tb-menu-toc.lvl-2 { padding-left: 40px !important; }
.tb-menu > button.tb-menu-toc.lvl-3 { padding-left: 56px !important; }
/* Phone Contents button: its own outline popover (actions stay in ⋯) */
.tb-toc-m { display: none; position: relative; }
@media (max-width: 767px) {
.tb-toc-m { display: inline-flex; }
.file-card-head .tb-toc-btn { box-shadow: none !important; background: transparent !important; width: 36px; height: 36px; }
.tb-toc-m .tb-menu { right: -44px; min-width: 260px; }
.tb-toc-m:has(.tb-menu)::before { content: ""; position: fixed; inset: 0; background: rgba(26,24,21,.22); z-index: 40; }
}
/* Dark on-state for view tools uses the lighter dark accent */
.dark-mode .file-card-actions > .btn-toggle.is-on, .dark-mode .file-card-actions > .btn-find.is-on { box-shadow: inset 0 0 0 1px #7FCFC2 !important; color: #7FCFC2 !important; }
.tb-toc-m:has(.tb-menu)::before, .tb-more:has(.tb-menu)::before { pointer-events: none; }
.tb-toc-menu > .tb-menu-label { padding-left: 16px !important; }
.tb-toc-menu > button.tb-menu-toc.lvl-2 { padding-left: 16px !important; }
.tb-toc-menu > button.tb-menu-toc.lvl-3 { padding-left: 32px !important; }
@media (max-width: 767px) { .tb-toc-m .tb-menu { right: -40px; max-width: calc(100vw - 28px); } }
/* Round 113: one icon box for folders and files; visible find-option state; one separator system in the toolbar */
.files .tree-icon-folder, .files .tree-icon-file { width: 16px !important; min-width: 16px; display: inline-flex; justify-content: center; }
.ace_search .ace_button[checked], .ace_search .ace_button.checked, .ace_search .ace_button[aria-checked="true"] { color: var(--accent) !important; box-shadow: inset 0 0 0 1px rgba(31,106,100,.55) !important; background: transparent !important; }
.dark-mode .ace_search .ace_button[checked], .dark-mode .ace_search .ace_button.checked, .dark-mode .ace_search .ace_button[aria-checked="true"] { color: #7FCFC2 !important; box-shadow: inset 0 0 0 1px #7FCFC2 !important; }
.file-card-meta .sep { font-size: 0 !important; display: inline-block; width: 0; margin: 0 6px !important; }
/* Phone home header: wordmark left, one right-aligned action group with even 4px gaps */
@media (max-width: 991px) {
.navbar .nav-heart-m { margin-left: auto !important; }
.navbar .nav-heart-m + .nav-theme-m { margin-left: 4px !important; }
.navbar .nav-theme-m + .nav-signin-m { margin-left: 4px !important; }
.navbar .navbar-toggler { margin-left: 4px !important; margin-right: -6px; }
}
.tb-toc-m:has(.tb-menu)::before, .tb-more:has(.tb-menu)::before { background: rgba(26,24,21,.1) !important; }
.dark-mode .tb-toc-m:has(.tb-menu)::before, .dark-mode .tb-more:has(.tb-menu)::before { background: rgba(0,0,0,.3) !important; }
/* Round 115: no partial scrim (shadowed popover + outside-tap close); stateful Wrap row; narrow phone fade; ZIP label scale; firmer swatch edge */
.tb-toc-m:has(.tb-menu)::before, .tb-more:has(.tb-menu)::before { content: none !important; }
.tb-menu { box-shadow: 0 12px 32px -8px rgba(26,24,21,.28), 0 0 0 1px rgba(26,24,21,.08) !important; }
.tb-menu [role="menuitemcheckbox"] { position: relative; padding-right: 40px !important; }
.tb-menu [role="menuitemcheckbox"][aria-checked="true"]::after { content: ""; position: absolute; right: 18px; top: 50%; width: 10px; height: 5px; border-left: 2px solid var(--accent); border-bottom: 2px solid var(--accent); transform: translateY(-70%) rotate(-45deg); }
.tb-menu [role="menuitemcheckbox"][aria-checked="true"] .ui-icon { color: var(--accent); }
@media (max-width: 767px) { .file-card.is-code.no-wrap .file-card-body::after { width: 20px !important; } }
.search-zip-label { font-size: 12px !important; font-weight: 500 !important; }
.meta-redact::before, .mobile-sub b::before { box-shadow: inset 0 0 0 1px rgba(40,32,24,.22) !important; }
/* Round 116: phone toolbar keeps Copy next to ⋯ on every file type (Contents appears to its left); mid-strength fade */
@media (max-width: 767px) {
.file-card-actions > .tb-toc-m, .file-card-head .tb-toc-m { order: 1 !important; }
.file-card-actions > .tb-copy-m, .file-card-head .tb-copy-m { order: 2 !important; }
.file-card-actions > .tb-more, .file-card-head .tb-more { order: 3 !important; }
.file-card.is-code.no-wrap .file-card-body::after { width: 26px !important; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(250,249,246,.92) 60%, #EAE5DC 100%) !important; box-shadow: inset -1px 0 0 rgba(40,32,24,.2) !important; }
}
@media (max-width: 767px) { .ace_editor .ace_gutter-cell { padding-left: 6px !important; padding-right: 8px !important; } }
.files .redact-slot i { font-size: 11px !important; }
.tb-menu-meta { padding-top: 0 !important; padding-left: 42px !important; }
.pane-url .meta-redact { font-family: var(--font-sans, Inter, system-ui, sans-serif) !important; font-size: 12px; }
/* Round 117: both phone popovers share one right edge; smaller phone wordmark leaves room for the action group */
@media (max-width: 767px) { .tb-toc-m .tb-menu { right: -76px !important; } }
@media (max-width: 991px) { .navbar .navbar-brand { font-size: 18px !important; margin-right: 16px !important; } }
.tb-menu .tb-menu-meta { white-space: nowrap; font-size: 12px !important; padding-left: 44px !important; padding-bottom: 8px !important; }
.tb-menu .tb-menu-meta { padding-left: 38px !important; }
/* Closing call to action before the footer */
.paper-cta { margin-top: 72px; margin-bottom: 72px; padding: 40px 0; border-top: 1px solid var(--border-color); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 20px; align-items: center; }
.paper-cta h2 { font-family: var(--font-serif); font-size: 40px; line-height: 1.05; letter-spacing: -0.01em; margin: 0 0 10px; color: var(--color); font-weight: 400; }
.paper-cta p { margin: 0; color: var(--ink-soft); font-size: 16px; max-width: 440px; }
.paper-cta-actions { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.paper-cta-actions .btn-hero { display: inline-flex; align-items: center; gap: 10px; }
@media (max-width: 991px) { .paper-cta { grid-template-columns: 1fr; row-gap: 20px; margin-top: 56px; margin-bottom: 40px; } .paper-cta h2 { font-size: 32px; } }
/* Round 119 */
.tb-menu-note, .tb-menu .tb-menu-meta { color: #57524A !important; }
.dark-mode .tb-menu-note, .dark-mode .tb-menu .tb-menu-meta { color: #ADA69B !important; }
.paper-cta { margin-bottom: 40px !important; padding-bottom: 40px !important; }
/* Round 120: find bar on the 32px grid with a neutral input at rest; Contents open = toggle on-state; outline/FAQ top alignment */
.ace_search .ace_search_field { height: 32px !important; box-sizing: border-box; border: 1px solid var(--control-border, #CFC7B9) !important; box-shadow: none !important; }
.ace_search .ace_search_field:focus-visible { border-color: var(--accent) !important; box-shadow: 0 0 0 3px rgba(31,106,100,.16) !important; }
.ace_search .ace_searchbtn, .ace_search .ace_button, .ace_search .ace_searchbtn_close { height: 32px !important; min-height: 32px !important; box-sizing: border-box; display: inline-flex !important; align-items: center; justify-content: center; }
.ace_search .ace_searchbtn_close { width: 32px !important; border-radius: 6px; }
.ace_search .ace_searchbtn_close:hover { background: var(--hover-bg-color) !important; }
.file-card-head .tb-toc-btn.is-on { background: transparent !important; box-shadow: inset 0 0 0 1px rgba(31,106,100,.55) !important; color: var(--accent) !important; }
@media (min-width: 1100px) { .readme-toc { top: 110px !important; margin-top: -28px !important; } }
@media (min-width: 1100px) { .paper-faq-help-card { margin-top: 2px !important; } }
@media (min-width: 1100px) { .readme-toc { top: 92px !important; } }
/* Round 121: hero product shot gets real presence: wider column, bleeds to the viewport edge, larger type */
@media (min-width: 1100px) {
.paper-hero { grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr) !important; column-gap: 40px !important; overflow: visible; }
.paper-hero-shot { margin-right: calc((100vw - 100%) / -2 + 0px); margin-right: min(-24px, calc((1076px - 100vw) / 2)); }
.paper-hero-shot .paper-frame { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; border-right: 0 !important; }
.hero-mock { font-size: 14px; min-height: 420px; }
.hero-mock-row { font-size: 13.5px !important; }
.hero-mock-doc-bar span { font-size: 13px !important; }
.paper-landing { overflow-x: clip; }
}
@media (min-width: 1100px) { .hero-mock { min-height: 0 !important; } }
+2 -2
View File
@@ -6,7 +6,7 @@
</div>
<div class="vb-right">
<span class="vb-snapshot" v-if="options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate" :title="(options?.expirationDate ? 'Available until ' + fmt?.date(options.expirationDate) + '. ' : '') + ((options?.anonymizedAt &amp;&amp; !options?.publishedAt) ? 'Older repositories have no recorded publication date. The source commit date does not establish when files became available here.' : ((options?.sourceCommitDate ? 'Source commit ' : options?.anonymizedAt ? 'Anonymized ' : 'Updated ') + fmt?.date(options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) + (options?.publishedAt ? ' · snapshot ready ' + fmt?.date(options.publishedAt) : '')))">
<svg class="ui-icon" aria-hidden="true"><use href="#project-icon-clock"></use></svg><span>Snapshot</span><span class="vb-dot" aria-hidden="true">·</span><span>{{ fmt?.date(options?.publishedAt || options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) }}</span>
<svg class="ui-icon" aria-hidden="true"><use href="#project-icon-clock"></use></svg><span>Snapshot</span><span>{{ fmt?.date(options?.publishedAt || options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) }}</span>
</span>
<a class="vb-support" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" title="Support Anonymous GitHub — help keep it free for researchers"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-heart"></use></svg><span>Support</span></a>
<div class="vb-help">
@@ -52,7 +52,7 @@
<kbd class="tree-search-kbd" v-show="!(fileSearchQuery)">{{ isMac ? '⌘' : 'Ctrl+' }}K</kbd>
<button class="tree-search-clear" aria-label="Clear search" v-show="fileSearchQuery" @click="fileSearchQuery = &#x27;&#x27;; onFileSearchChange()">&times;</button>
</div>
<a target="_self" class="search-zip" v-if="options?.download" aria-label="Download repository as ZIP" :title="'Download the repository (snapshot ' + fmt?.date(options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) + ') as ZIP'" :href="safeUrl(&quot;/api/repo/&quot; + (repoId) + &quot;/zip&quot;)"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-download"></use></svg></a>
<a target="_self" class="search-zip" v-if="options?.download" aria-label="Download repository as ZIP" :title="'Download the repository (snapshot ' + fmt?.date(options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) + ') as ZIP'" :href="safeUrl(&quot;/api/repo/&quot; + (repoId) + &quot;/zip&quot;)"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-download"></use></svg><span class="search-zip-label" aria-hidden="true">ZIP</span></a>
</div>
<div class="leftCol-body">
<div class="paper-inline-warning" role="alert" v-if="options?.truncatedFolders?.length &gt; 0">
+13 -14
View File
@@ -1,10 +1,9 @@
<div class="paper-faq">
<div class="paper-faq-hero">
<div class="paper-faq-eyebrow">Help</div>
<h1 class="paper-faq-title">Answers to the questions that <em>come up most.</em></h1>
<h1 class="paper-faq-title">Mirrors, redaction, and <em>what reviewers see.</em></h1>
<p class="paper-faq-lede">
Can&rsquo;t find your answer?
<a href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener">Open an issue on GitHub</a>.
How to set up an anonymous mirror, what it hides, and how long it stays online.
</p>
</div>
<div class="paper-faq-body">
@@ -39,8 +38,8 @@
<div class="panel-body p-3">
<p>
Anonymous GitHub is an open-source tool with free hosting and optional paid plans that anonymizes GitHub repositories and pull requests
for double-anonymous (double-blind) peer review. It replaces identifying information &mdash; such as
the repository owner, organization name, and custom terms &mdash; so that reviewers cannot determine
for double-anonymous (double-blind) peer review. It replaces identifying information, such as
the repository owner, organization name, and custom terms, so that reviewers cannot determine
the identity of the authors through the code repository.
</p>
</div>
@@ -80,7 +79,7 @@
<div class="panel-body p-3">
<p>
In double-anonymous peer review, the boundary of anonymization is the paper plus its online
appendix &mdash; not the entire internet. Searching for any part of the paper or the online appendix
appendix, not the entire internet. Searching for any part of the paper or the online appendix
can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the
repository owner, organization, repository name, file and directory names, and file contents
across all text-based file types.
@@ -266,11 +265,11 @@
Anonymous GitHub can display and render a wide variety of file types:
</p>
<ul>
<li><strong>Text and source code</strong> &mdash; displayed with syntax highlighting</li>
<li><strong>Markdown</strong> &mdash; rendered as formatted HTML</li>
<li><strong>Images</strong> (PNG, JPG, SVG, etc.) &mdash; displayed inline</li>
<li><strong>PDFs</strong> &mdash; rendered directly in the browser</li>
<li><strong>Jupyter Notebooks</strong> &mdash; rendered with code cells and outputs</li>
<li><strong>Text and source code</strong>: displayed with syntax highlighting</li>
<li><strong>Markdown</strong>: rendered as formatted HTML</li>
<li><strong>Images</strong> (PNG, JPG, SVG, etc.): displayed inline</li>
<li><strong>PDFs</strong>: rendered directly in the browser</li>
<li><strong>Jupyter Notebooks</strong>: rendered with code cells and outputs</li>
</ul>
<p>
Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to
@@ -334,8 +333,8 @@
</p>
<ul>
<li><strong>Never expire</strong>: with a monthly or annual author subscription, no scheduled expiration while subscribed. A 90-day grace period applies after paid access ends. See <a href="#neverExpire">the subscription expiration policy</a>.</li>
<li><strong>Redirect to GitHub</strong> &mdash; after expiration, visitors are redirected to the original GitHub repository.</li>
<li><strong>Remove content</strong> &mdash; after expiration, the anonymized content is deleted from the server.</li>
<li><strong>Redirect to GitHub</strong>: after expiration, visitors are redirected to the original GitHub repository.</li>
<li><strong>Remove content</strong>: after expiration, the anonymized content is deleted from the server.</li>
</ul>
</div>
</div>
@@ -460,7 +459,7 @@ anonymous_github</code></pre>
<p>
Repository data is used to provide the anonymization service. If you purchase a plan, Stripe
processes payment and billing information. When a repository is removed or expires, only its configuration is
retained &mdash; this makes it easy to restore the repository if needed and ensures that no
retained. This makes it easy to restore the repository if needed and ensures that no
future repository reuses the same ID.
</p>
</div>
+2 -1
View File
@@ -5,7 +5,8 @@
<span class="nav-support-label">Support</span>
</a>
<a class="nav-heart-m" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" aria-label="Support Anonymous GitHub" title="Support Anonymous GitHub" v-if="!/^\/(r|w|pr|gist)\//.test(path || '')"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-heart"></use></svg></a>
<a class="nav-signin-m" href="/signin" target="_self" v-if="!user &amp;&amp; !/^\/(r|w|pr|gist)\//.test(path || '')">Sign in</a>
<button type="button" class="nav-theme-m" v-if="!/^\/(r|w|pr|gist)\//.test(path || '')" :aria-label="isDarkMode ? 'Switch to light mode' : 'Switch to dark mode'" :title="isDarkMode ? 'Switch to light mode' : 'Switch to dark mode'" @click="darkMode(!isDarkMode)"><svg class="ui-icon" aria-hidden="true"><use :href="isDarkMode ? '#ui-icon-sun' : '#ui-icon-moon'"></use></svg></button>
<a class="nav-signin-m" href="/signin" target="_self" aria-label="Sign in with GitHub" v-if="!user &amp;&amp; !/^\/(r|w|pr|gist)\//.test(path || '')"><i class="fab fa-github" aria-hidden="true"></i>Sign in</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
+19 -9
View File
@@ -23,9 +23,9 @@
<a class="paper-link-arrow" target="_self" href="https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/">See an anonymized repository &rarr;</a>
</div>
<ul class="paper-reassure">
<li>Free and open source</li>
<li>Read-only GitHub access</li>
<li>Expires when you choose</li>
<li>Free, open source</li>
<li>Read-only access</li>
<li>Set an expiry date</li>
</ul>
</div>
<div class="paper-hero-shot">
@@ -98,14 +98,14 @@ python experiments/run.py</pre>
</div>
<div class="demo-panes">
<div class="pane">
<div class="pane-header"><span class="pane-label">Your repository</span><span class="pane-url">github.com/jane-smith/DeepLearnUtils</span></div>
<div class="pane-header"><span class="pane-label">Your repository <span class="pane-edit-hint">· editable</span></span><span class="pane-url">github.com/jane-smith/DeepLearnUtils</span></div>
<div class="demo-input-wrap">
<div class="pane-body demo-backdrop" aria-hidden="true"><template v-for="(p, i) in demoParts()" :key="i"><mark v-if="p.redacted" class="demo-match">{{ p.original }}</mark><template v-else>{{ p.text }}</template></template>&#8203;</div>
<textarea class="pane-body demo-input" v-model="demoText" spellcheck="false" aria-label="Sample README to anonymize"></textarea>
</div>
</div>
<div class="pane pane-after">
<div class="pane-header"><span class="pane-label">What reviewers see</span><span class="pane-url">{{ demoCount() }} redacted · anonymous.4open.science/r/paper-7f2a</span></div>
<div class="pane-header"><span class="pane-label">What reviewers see</span><span class="pane-url"><span class="meta-redact">{{ demoCount() }} redacted</span></span></div>
<div class="pane-body demo-output" aria-live="polite"><template v-for="(p, i) in demoParts()" :key="i"><span v-if="p.redacted" class="redact-chip" :title="'Replaces “' + p.original + '”'">{{ p.text }}</span><template v-else>{{ p.text }}</template></template></div>
</div>
</div>
@@ -115,7 +115,7 @@ python experiments/run.py</pre>
<section class="paper-section-head paper-wrap" id="about">
<div>
<div class="paper-eyebrow">What you get</div>
<h2>Anonymize, review, <em>manage.</em></h2>
<h2>Anonymize, review, manage.</h2>
</div>
<p>
Terms are redacted in text files. Enabled images and PDFs are served
@@ -128,10 +128,10 @@ python experiments/run.py</pre>
<div class="paper-feature" v-for="(f, index) in features" :key="f?.key" :class="{&#x27;is-on&#x27;: feature === f?.key}">
<button type="button" class="paper-feature-tab" role="tab" @click="selectFeature(f.key)" @keydown="featureKeydown($event, index)" :id="&quot;feature-tab-&quot; + (f?.key)" :aria-controls="&quot;feature-panel-&quot; + (f?.key)" :aria-selected="(feature === f?.key)" :tabindex="(feature === f?.key ? 0 : -1)">
<span class="paper-eyebrow">{{ f?.num }} &middot; {{ f?.eyebrow }}</span>
<span class="paper-feature-title">{{ f?.title }} <em>{{ f?.accent }}</em></span>
<span class="paper-feature-title">{{ f?.title }} {{ f?.accent }}</span>
</button>
<div class="paper-feature-more">
<span class="paper-feature-title paper-feature-title-m" aria-hidden="true">{{ f?.title }} <em>{{ f?.accent }}</em></span>
<span class="paper-feature-title paper-feature-title-m" aria-hidden="true">{{ f?.title }} {{ f?.accent }}</span>
<p>{{ f?.text }}</p>
<a class="paper-link-arrow" :href="safeUrl((featureHref(f)))" :target="(featureTarget(f))">{{ f?.cta }} &rarr;</a>
</div>
@@ -195,7 +195,7 @@ python experiments/run.py</pre>
<section class="paper-qa paper-wrap" aria-labelledby="qa-heading">
<div>
<div class="paper-eyebrow">Before you sign in</div>
<h2 id="qa-heading">The questions that <em>come up most.</em></h2>
<h2 id="qa-heading">The questions that come up most.</h2>
<a class="paper-link-arrow" href="/faq">Read the full FAQ &rarr;</a>
</div>
<div>
@@ -225,6 +225,16 @@ python experiments/run.py</pre>
</div>
</section>
<section class="paper-cta paper-wrap" aria-labelledby="cta-heading">
<div>
<h2 id="cta-heading">Ready for review?</h2>
<p>Create an anonymous mirror in a couple of minutes. Reviewers just open the link.</p>
</div>
<div class="paper-cta-actions">
<a class="btn-hero" href="/signin" target="_self"><i class="fab fa-github" aria-hidden="true"></i> Sign in with GitHub</a>
<a class="paper-link-arrow" href="/faq">Read the FAQ &rarr;</a>
</div>
</section>
<footer class="paper-footer">
<div class="paper-footer-inner">
<div class="paper-footer-brand">
+1
View File
@@ -53,6 +53,7 @@
<symbol id="ui-icon-zip" viewBox="0 0 24 24"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M12 10v6m-2.5-2.5L12 16l2.5-2.5"/></symbol>
<symbol id="ui-icon-goto" viewBox="0 0 24 24"><path d="M9 4 7 20M17 4l-2 16M4 9h16M3 15h16"/></symbol>
<symbol id="ui-icon-wrap" viewBox="0 0 24 24"><path d="M3 6h18M3 12h14.5a3.5 3.5 0 0 1 0 7H13m2-2.5L12.5 19l2.5 2.5M3 18h6"/></symbol>
<symbol id="ui-icon-outline" viewBox="0 0 24 24"><path d="M4 6h16M8 12h12M8 18h12M4 12h.01M4 18h.01"/></symbol>
<symbol id="ui-icon-list" viewBox="0 0 24 24"><path d="M9 5h12M9 12h12M9 19h12m-18-14 1 1 2-2m-3 8 1 1 2-2m-3 8 1 1 2-2"/></symbol>
<symbol id="ui-icon-bug" viewBox="0 0 24 24"><rect x="7" y="7" width="10" height="14" rx="5"/><path d="M9 7V5a3 3 0 0 1 6 0v2M12 7v14M3 8l4 2m-4 5h4m-4 7 4-4M21 8l-4 2m4 5h-4m4 7-4-4"/></symbol>
<symbol id="ui-icon-chevron-left" viewBox="0 0 24 24"><path d="m15 5-7 7 7 7"/></symbol>

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

+17 -5
View File
@@ -28,7 +28,7 @@
<li class="breadcrumb-item" v-for="(p, index) in paths" :aria-current="index === paths.length - 1 ? 'page' : null"><template v-for="(seg, si) in redactParts(p)" :key="si"><span v-if="seg.n" class="redact-slot" role="img" :aria-label="'Redacted term ' + seg.n"><i>{{ seg.n }}</i></span><template v-else>{{ seg.t }}</template></template></li>
</ol>
<span class="mobile-sub"><span>{{ type == 'html' ? 'Markdown' : (languageName || 'Text') }}</span><span v-if="type != 'html' &amp;&amp; typeof content === 'string'">{{ fmt?.number(content.split('\n').length) }} lines</span><span v-if="type == 'html' && fileSize(filePath) != null">{{ formatSize(fileSize(filePath)) }}</span><b v-if="redactionCount()">{{ redactionCount() }} redacted</b></span>
<button type="button" class="btn btn-sm btn-icon-only btn-ghost copy-path-btn" v-show="filePath" :aria-label="pathCopied ? 'Path copied' : 'Copy path'" :title="pathCopied ? 'Path copied' : 'Copy path'" @click="copyPath()"><svg class="ui-icon" aria-hidden="true"><use :href="pathCopied ? '#ui-icon-check' : '#ui-icon-link'"></use></svg></button>
<button type="button" class="btn btn-sm btn-icon-only btn-ghost copy-path-btn" v-show="filePath" :aria-label="pathCopied ? 'Path copied' : 'Copy file path'" :title="pathCopied ? 'Path copied' : 'Copy file path'" @click="copyPath()"><svg class="ui-icon" aria-hidden="true"><use :href="pathCopied ? '#ui-icon-check' : '#ui-icon-link'"></use></svg></button>
</div>
<span class="file-card-meta" v-if="type != 'html' &amp;&amp; typeof content === 'string'"><template v-if="languageName">{{ languageName }}<span class="sep">·</span></template>{{ fmt?.number(content.split('\n').length) }} lines<span class="meta-extra"><span class="sep">·</span>{{ content.length &lt; 1024 ? content.length + ' B' : (content.length / 1024).toFixed(1) + ' KB' }}</span><template v-if="redactionCount()"><span class="sep">·</span><span class="meta-redact">{{ redactionCount() }} redacted</span></template></span>
<span class="file-card-meta" v-if="type == 'html'">Markdown<template v-if="fileSize(filePath) != null"><span class="sep">·</span>{{ formatSize(fileSize(filePath)) }}</template><template v-if="redactionCount()"><span class="sep">·</span><span class="meta-redact">{{ redactionCount() }} redacted</span></template></span>
@@ -50,19 +50,31 @@
<a target="_self" class="tb-seg-btn tb-seg-icon" aria-label="Download file" title="Download file" :href="safeUrl((url) + &quot;&amp;download=true&quot;)"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-download"></use></svg></a>
</div>
<button type="button" class="btn btn-sm btn-icon-only btn-ghost tb-copy-m" v-if="typeof content === 'string'" :aria-label="contentCopied ? 'Copied' : 'Copy file contents'" @click="copyContent()"><svg class="ui-icon" aria-hidden="true"><use :href="contentCopied ? '#ui-icon-check' : '#project-icon-copy'"></use></svg></button>
<div class="tb-toc-m" v-if="type == 'html' &amp;&amp; readmeToc().length &gt;= 3">
<button type="button" class="btn btn-sm btn-icon-only btn-ghost tb-toc-btn" :class="{ 'is-on': tocOpen }" aria-label="On this page" title="On this page" aria-haspopup="true" :aria-expanded="tocOpen ? 'true' : 'false'" @click.stop="tocOpen = !tocOpen; moreOpen = false"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-outline"></use></svg></button>
<div class="tb-menu tb-toc-menu" v-if="tocOpen" role="menu" @click="tocOpen = false">
<div class="tb-menu-label">On this page</div>
<button type="button" role="menuitem" :class="['tb-menu-toc', 'lvl-2', { 'is-active': !activeHeading }]" @click="scrollToHeading(null)">Introduction</button>
<button type="button" role="menuitem" v-for="h in readmeToc()" :key="'m-' + h.id" :class="['tb-menu-toc', 'lvl-' + h.level, { 'is-active': activeHeading === h.id }]" @click="scrollToHeading(h.id)">{{ h.text }}</button>
</div>
</div>
<div class="tb-more">
<button type="button" class="btn btn-sm btn-icon-only btn-ghost tb-more-btn" :class="{ 'is-on': moreOpen }" aria-label="More actions" aria-haspopup="true" :aria-expanded="moreOpen ? 'true' : 'false'" @click.stop="moreOpen = !moreOpen"><svg viewBox="0 0 24 24" class="ui-icon" aria-hidden="true" style="fill:currentColor;stroke:none"><circle cx="5" cy="12" r="1.8"/><circle cx="12" cy="12" r="1.8"/><circle cx="19" cy="12" r="1.8"/></svg></button>
<button type="button" class="btn btn-sm btn-icon-only btn-ghost tb-more-btn" :class="{ 'is-on': moreOpen }" aria-label="More actions" aria-haspopup="true" :aria-expanded="moreOpen ? 'true' : 'false'" @click.stop="tocOpen = false; moreOpen = !moreOpen"><svg viewBox="0 0 24 24" class="ui-icon" aria-hidden="true" style="fill:currentColor;stroke:none"><circle cx="5" cy="12" r="1.8"/><circle cx="12" cy="12" r="1.8"/><circle cx="19" cy="12" r="1.8"/></svg></button>
<div class="tb-menu" v-if="moreOpen" role="menu" @click="moreOpen = false">
<div class="tb-menu-note" v-if="options?.publishedAt || options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-clock"></use></svg>Snapshot · {{ fmt?.date(options?.publishedAt || options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate) }}</div>
<div class="tb-menu-note tb-menu-meta" v-if="typeof content === 'string'">{{ type == 'html' ? 'Markdown' : (languageName || 'Text') }}<template v-if="type != 'html'"> · {{ fmt?.number(content.split('\n').length) }} lines</template> · {{ type == 'html' &amp;&amp; fileSize(filePath) != null ? formatSize(fileSize(filePath)) : (content.length &lt; 1024 ? content.length + ' B' : (content.length / 1024).toFixed(1) + ' KB') }}</div>
<div class="tb-menu-sep" v-if="options?.publishedAt || options?.sourceCommitDate || options?.anonymizedAt || options?.lastUpdateDate"></div>
<button type="button" role="menuitem" v-if="type == 'html'" @click="toggleMdFind()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-search"></use></svg>Find in file</button>
<div class="tb-menu-sep" v-if="type == 'html'"></div>
<button type="button" role="menuitem" v-if="type != 'html'" @click="findInFile()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-search"></use></svg>Find in file</button>
<button type="button" role="menuitem" v-if="type != 'html'" @click="gotoLine()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-goto"></use></svg>Go to line</button>
<button type="button" role="menuitemcheckbox" v-if="type != 'html'" :aria-checked="wrapLines ? 'true' : 'false'" @click="toggleWrap()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-wrap"></use></svg>Wrap lines<span class="tb-menu-check" v-if="wrapLines">✓</span></button>
<div class="tb-menu-sep" v-if="type != 'html'"></div>
<a role="menuitem" target="_self" v-if="type != 'html'" :href="safeUrl((url))"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-code"></use></svg>Open raw file</a>
<button type="button" role="menuitem" v-if="typeof content === 'string'" @click="copyContent()"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-copy"></use></svg>Copy contents</button>
<a role="menuitem" target="_self" v-if="type == 'html'" :href="safeUrl((url))"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-code"></use></svg>View raw</a>
<a role="menuitem" target="_self" v-if="type != 'html'" :href="safeUrl((url))"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-code"></use></svg>View raw</a>
<a role="menuitem" target="_self" :href="safeUrl((url) + &quot;&amp;download=true&quot;)"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-download"></use></svg>Download file</a>
<button type="button" role="menuitem" @click="copyPath()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg>Copy path</button>
<a role="menuitem" target="_self" v-if="options?.download" :href="safeUrl(&quot;/api/repo/&quot; + (repoId) + &quot;/zip&quot;)"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-archive"></use></svg>Download ZIP</a>
<button type="button" role="menuitem" @click="copyPath()"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg>Copy file path</button>
<div class="tb-menu-sep"></div>
<a role="menuitem" href="/faq"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-help"></use></svg>FAQ</a>
<a role="menuitem" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-bug"></use></svg>Report a bug</a>
+25 -4
View File
@@ -2533,7 +2533,22 @@ export const exploreController = function (state, http, location, params, html,
const timers = createTimers();
// Prism rewrites fenced code blocks, so mark redactions once it is done.
if (window.Prism?.hooks && !window.Prism.redactionHook) {
window.Prism.hooks.add("complete", (env) => markRedactionsIn(env.element));
window.Prism.hooks.add("complete", (env) => {
markRedactionsIn(env.element);
// Show the same numbered slot as the rest of the viewer.
env.element.querySelectorAll?.("mark.redaction").forEach((mark) => {
const m = /^XXXX-(\d+)$/.exec(mark.textContent);
if (!m) return;
mark.className = "redact-chip";
mark.setAttribute("title", "Redacted term " + m[1] + " — the same term everywhere in this snapshot");
mark.setAttribute("aria-label", "Redacted term " + m[1]);
mark.dataset.term = m[0];
mark.textContent = "";
const idx = mark.ownerDocument.createElement("i");
idx.textContent = m[1];
mark.appendChild(idx);
});
});
window.Prism.redactionHook = true;
}
const listen = createListeners();
@@ -2570,11 +2585,12 @@ export const exploreController = function (state, http, location, params, html,
listen(document, "click", (e) => {
if (state.symbolsOpen && !e.target.closest?.(".symbols")) state.symbolsOpen = false;
if (state.moreOpen && !e.target.closest?.(".tb-more")) state.moreOpen = false;
if (state.tocOpen && !e.target.closest?.(".tb-toc-m")) state.tocOpen = false;
if (state.accountOpen && !e.target.closest?.(".acct")) state.accountOpen = false;
if (state.helpOpen && !e.target.closest?.(".vb-help")) state.helpOpen = false;
});
listen(document, "keydown", (e) => {
if (e.key === "Escape") { state.symbolsOpen = false; state.moreOpen = false; state.accountOpen = false; state.helpOpen = false; }
if (e.key === "Escape") { state.symbolsOpen = false; state.moreOpen = false; state.tocOpen = false; state.accountOpen = false; state.helpOpen = false; }
if ((e.ctrlKey || e.metaKey) && !e.altKey && e.key && e.key.toLowerCase() === "f" && state.type === "html" && window.document.querySelector(".reading-layout")) {
e.preventDefault();
state.toggleMdFind(true);
@@ -3056,7 +3072,12 @@ export const exploreController = function (state, http, location, params, html,
const doc = new window.DOMParser().parseFromString("<div>" + html + "</div>", "text/html");
const walker = doc.createTreeWalker(doc.body, 4);
const nodes = [];
while (walker.nextNode()) if (REDACTION_RE.test(walker.currentNode.nodeValue)) nodes.push(walker.currentNode);
while (walker.nextNode()) {
REDACTION_RE.lastIndex = 0;
// Prism re-highlights code blocks from their text, so those are slotted in its hook.
if (walker.currentNode.parentElement?.closest("pre code")) continue;
if (REDACTION_RE.test(walker.currentNode.nodeValue)) nodes.push(walker.currentNode);
}
for (const node of nodes) {
REDACTION_RE.lastIndex = 0;
const frag = doc.createDocumentFragment();
@@ -3344,7 +3365,7 @@ export const exploreController = function (state, http, location, params, html,
theme: "chrome",
useSoftTab: true,
tabSize: 2,
fontSize: 13,
fontSize: window.matchMedia?.("(max-width: 767px)").matches ? 12 : 13,
keyBinding: "vscode",
fullLineSelection: true,
highlightActiveLine: false,
+1
View File
@@ -7,6 +7,7 @@ export function initializeTemplate(name, state) {
state.sidebarHidden = false;
state.dirExpanded = false;
state.moreOpen = false;
state.tocOpen = false;
state.mdFindOpen = false;
state.mdFindQuery = "";
state.mdFindTotal = 0;
+26 -25
View File
@@ -1,34 +1,34 @@
"use strict";(()=>{var Ed=Object.defineProperty;var Sd=(e,t)=>{for(var o in t)Ed(e,o,{get:t[o],enumerable:!0})};var fe=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var me={markdown:"/script/markdown.6c8dfb7b1d.min.js",notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js",editor:"/script/editor.4f142d3adc.min.js"};function Ei(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let o=new URLSearchParams(t);if([...o.keys()].length!==3||[...o.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let i=o.get("clientId"),s=o.get("intentId"),r=o.get("token");return!/^[a-f0-9]{32}$/.test(i||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(r||"")?null:{contract:"4open.artifacts/1",clientId:i,intentId:s,token:r}}function Si(e,t){let{http:o,promises:i,window:s}=t,r=t.takeReviewHandoff(),a=r?{clientId:r.clientId,intentId:r.intentId}:null,p,f,y,b,w,m=!0,E,I=i.defer(),C=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(F=>F.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:r?"":"Open a new artifact link from your submission. This link is missing or invalid."});let v=()=>m&&e.user?.username===w;function S(){m=!1,r=p=f=void 0,I.resolve(),s.clearTimeout(E)}e.on("dispose",S),e.on("routeLeave",S),e.watch(()=>e.user?.username,F=>{!w&&F?w=F:w&&F!==w&&(S(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let D=()=>({timeout:I.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":f}}),V=F=>F?.status===404?"Artifact linking is not available on this server.":F?.status===401?"Sign in, then open a new artifact link from your submission.":F?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!m||!r||e.busy||e.uncertain||e.saved||!e.user?.username)return;w=e.user.username;let F=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(F)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,p=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(E),b||(b=C());try{let L=(await o.get("/api/review-consent/csrf",{timeout:I.promise})).data;if(!v())return;if(f=L.csrf,e.handoffEnabled=L.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(f||""))throw new Error("invalid_csrf");let G=(await o.post("/api/review-consent/preview",{repositoryId:F,intent:{...r,requestId:b}},D())).data;if(!v())return;if(!G||typeof G.ticket!="string"||!G.ticket||G.ticket.length>8192||typeof G.repositoryName!="string"||!["restricted-review","anonymous-link"].includes(G.policy?.access)||!Number.isSafeInteger(G.policy.version)||!Number.isFinite(Date.parse(G.policy.retainUntil))||!Number.isFinite(Date.parse(G.expiresAt))||Date.parse(G.expiresAt)<=Date.now()||Date.parse(G.expiresAt)>Date.now()+6e5)throw new Error("invalid_preview");p=G.ticket,y=C(),e.preview={repositoryName:G.repositoryName,policy:{...G.policy},expiresAt:G.expiresAt},E=s.setTimeout(()=>{m&&(e.expired=!0)},Math.max(0,Date.parse(G.expiresAt)-Date.now()))}catch(L){v()&&(e.error=V(L))}finally{v()&&(e.busy=!1)}},e.confirmConsent=async()=>{if(!(!v()||e.busy||e.saved||!p||!e.acceptAccesLine truncated
`))),e[zt]=An(s);let r=i||s.props&&s.props.type==="number";nn(e,t?"change":"input",a=>{a.target.composing||e[zt](Zs(e.value,o,r))}),(o||r)&&nn(e,"change",()=>{e.value=Zs(e.value,o,r)}),t||(nn(e,"compositionstart",Dc),nn(e,"compositionend",ua),nn(e,"change",ua))},mounted(e,{value:t,modifiers:{trim:o,number:i}}){let s=t??"",r=e[Zo];delete e[Zo],r!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==r?e[zt](Zs(e.value,o,i)):e.value=s},beforeUpdate(e,{value:t,oldValue:o,modifiers:{lazy:i,trim:s,number:r}},a){if(e[zt]=An(a),e.composing)return;let p=(r||e.type==="number")&&!/^0\d/.test(e.value)?En(e.value):e.value,f=t??"";if(p===f)return;let y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(i&&t===o||s&&e.value.trim()===f)||(e.value=f)}},ei={deep:!0,created(e,t,o){e[zt]=An(o),nn(e,"change",()=>{let i=e._modelValue,s=vo(e),r=e.checked,a=e[zt];if(ge(i)){let p=Ro(i,s),f=p!==-1;if(r&&!f)a(i.concat(s));else if(!r&&f){let y=[...i];y.splice(p,1),a(y)}}else if(St(i)){let p=new Set(i);r?p.add(s):p.delete(s),a(p)}else a(va(e,r))})},mounted:ca,beforeUpdate(e,t,o){e[zt]=An(o),ca(e,t,o)}};function ca(e,{value:t,oldValue:o},i){e._modelValue=t;let s;if(ge(t))s=Ro(t,i.props.value)>-1;else if(St(t))s=t.has(i.props.value);else{if(t===o)return;s=Nt(t,va(e,!0))}e.checked!==s&&(e.checked=s)}var fn={deep:!0,created(e,{value:t,modifiers:{number:o}},i){e._modelValue=t,nn(e,"change",()=>{let s=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>o?En(vo(f)):vo(f)),r=e.multiple,a=r?St(e._modelValue)?new Set(s):s:s[0],p=e._pendingValue=[r,r?ge(a)?s.slice():s:a];try{e[zt](a)}finally{je(()=>{e._pendingValue===p&&(e._pendingValue=void 0)})}}),e[zt]=An(i)},mounted(e,{value:t}){pa(e,t)},beforeUpdate(e,{value:t},o){e._modelValue=t,e[zt]=An(o)},updated(e,{value:t}){let o=e._pendingValue;e._pendingValue=void 0,(!o||o[0]!==e.multiple||!_c(t,o[1],o[0]))&&pa(e,t)}};function _c(e,t,o){if(!o)return Nt(e,t);if(ge(e))return Nt(e,t);if(St(e)){if(e.size!==t.length)return!1;for(let i of t)if(!e.has(i))return!1;return!0}return!1}function pa(e,t){let o=e.multiple,i=ge(t);if(!(o&&!i&&!St(t))){for(let s=0,r=e.options.length;s<r;s++){let a=e.options[s],p=vo(a);if(o)if(i){let f=typeof p;f==="string"||f==="number"?a.selected=t.some(y=>String(y)===String(p)):a.selected=Ro(t,p)>-1}else a.selected=t.has(p);else if(Nt(vo(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!o&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function vo(e){return"_value"in e?e._value:e.value}function va(e,t){let o=t?"_trueValue":"_falseValue";return o in e?e[o]:t}var Tc=["ctrl","shift","alt","meta"],Ac={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Tc.some(o=>e[`${o}Key`]&&!t.includes(o))},le=(e,t)=>{if(!e)return e;let o=e._withMods||(e._withMods={}),i=t.join(".");return o[i]||(o[i]=((s,...r)=>{for(let a=0;a<t.length;a++){let p=Ac[t[a]];if(p&&p(s,t))return}return e(s,...r)}))},Oc={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},yt=(e,t)=>{let o=e._withKeys||(e._withKeys={}),i=t.join(".");return o[i]||(o[i]=(s=>{if(!("key"in s))return;let r=Pt(s.key);if(t.some(a=>a===r||Oc[a]===r))return e(s)}))},Pc=He({patchProp:Sc},lc),fa;function Ic(){return fa||(fa=Wr(Pc))}var ga=((...e)=>{let t=Ic().createApp(...e),{mount:o}=t;return t.mount=i=>{let s=Vc(i);if(!s)return;let r=t._component;!Ce(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=o(s,!1,Mc(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Mc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Vc(e){return $e(e)?document.querySelector(e):e}var vn=typeof document<"u";function ba(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ba(e.default)}var Oe=Object.assign;function es(e,t){let o={};for(let i in t){let s=t[i];o[i]=Ct(s)?s.map(e):e(s)}return o}var Pn=()=>{},Ct=Array.isArray;function oi(e,t){let o={};for(let i in e)o[i]=i in t?t[i]:e[i];return o}var wa=/#/g,Lc=/&/g,$c=/\//g,Uc=/=/g,Fc=/\?/g,ka=/\+/g,Bc=/%5B/g,zc=/%5D/g,Ca=/%5E/g,Hc=/%60/g,Ea=/%7B/g,jc=/%7C/g,Sa=/%7D/g,Gc=/%20/g;function si(e){return e==null?"":encodeURI(""+e).replace(jc,"|").replace(Bc,"[").replace(zc,"]")}function Na(e){return si(e).replace(Ea,"{").replace(Sa,"}").replace(Ca,"^")}function ti(e){return si(e).replace(ka,"%2B").replace(Gc,"+").replace(wa,"%23").replace(Lc,"%26").replace(Hc,"`").replace(Ea,"{").replace(Sa,"}").replace(Ca,"^")}function Wc(e){return ti(e).replace(Uc,"%3D")}function Kc(e){return sLine truncated
"use strict";(()=>{var Ed=Object.defineProperty;var Sd=(e,t)=>{for(var o in t)Ed(e,o,{get:t[o],enumerable:!0})};var pe=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var fe={markdown:"/script/markdown.6c8dfb7b1d.min.js",notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js",editor:"/script/editor.4f142d3adc.min.js"};function Ei(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let o=new URLSearchParams(t);if([...o.keys()].length!==3||[...o.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let i=o.get("clientId"),s=o.get("intentId"),r=o.get("token");return!/^[a-f0-9]{32}$/.test(i||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(r||"")?null:{contract:"4open.artifacts/1",clientId:i,intentId:s,token:r}}function Si(e,t){let{http:o,promises:i,window:s}=t,r=t.takeReviewHandoff(),a=r?{clientId:r.clientId,intentId:r.intentId}:null,p,f,y,b,w,m=!0,E,I=i.defer(),C=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(F=>F.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:r?"":"Open a new artifact link from your submission. This link is missing or invalid."});let v=()=>m&&e.user?.username===w;function S(){m=!1,r=p=f=void 0,I.resolve(),s.clearTimeout(E)}e.on("dispose",S),e.on("routeLeave",S),e.watch(()=>e.user?.username,F=>{!w&&F?w=F:w&&F!==w&&(S(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let D=()=>({timeout:I.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":f}}),V=F=>F?.status===404?"Artifact linking is not available on this server.":F?.status===401?"Sign in, then open a new artifact link from your submission.":F?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!m||!r||e.busy||e.uncertain||e.saved||!e.user?.username)return;w=e.user.username;let F=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(F)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,p=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(E),b||(b=C());try{let L=(await o.get("/api/review-consent/csrf",{timeout:I.promise})).data;if(!v())return;if(f=L.csrf,e.handoffEnabled=L.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(f||""))throw new Error("invalid_csrf");let G=(await o.post("/api/review-consent/preview",{repositoryId:F,intent:{...r,requestId:b}},D())).data;if(!v())return;if(!G||typeof G.ticket!="string"||!G.ticket||G.ticket.length>8192||typeof G.repositoryName!="string"||!["restricted-review","anonymous-link"].includes(G.policy?.access)||!Number.isSafeInteger(G.policy.version)||!Number.isFinite(Date.parse(G.policy.retainUntil))||!Number.isFinite(Date.parse(G.expiresAt))||Date.parse(G.expiresAt)<=Date.now()||Date.parse(G.expiresAt)>Date.now()+6e5)throw new Error("invalid_preview");p=G.ticket,y=C(),e.preview={repositoryName:G.repositoryName,policy:{...G.policy},expiresAt:G.expiresAt},E=s.setTimeout(()=>{m&&(e.expired=!0)},Math.max(0,Date.parse(G.expiresAt)-Date.now()))}catch(L){v()&&(e.error=V(L))}finally{v()&&(e.busy=!1)}},e.confirmConsent=async()=>{if(!(!v()||e.busy||e.saved||!p||!e.acceptAccesLine truncated
`))),e[zt]=An(s);let r=i||s.props&&s.props.type==="number";nn(e,t?"change":"input",a=>{a.target.composing||e[zt](Zs(e.value,o,r))}),(o||r)&&nn(e,"change",()=>{e.value=Zs(e.value,o,r)}),t||(nn(e,"compositionstart",Dc),nn(e,"compositionend",ua),nn(e,"change",ua))},mounted(e,{value:t,modifiers:{trim:o,number:i}}){let s=t??"",r=e[Zo];delete e[Zo],r!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==r?e[zt](Zs(e.value,o,i)):e.value=s},beforeUpdate(e,{value:t,oldValue:o,modifiers:{lazy:i,trim:s,number:r}},a){if(e[zt]=An(a),e.composing)return;let p=(r||e.type==="number")&&!/^0\d/.test(e.value)?En(e.value):e.value,f=t??"";if(p===f)return;let y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(i&&t===o||s&&e.value.trim()===f)||(e.value=f)}},ei={deep:!0,created(e,t,o){e[zt]=An(o),nn(e,"change",()=>{let i=e._modelValue,s=vo(e),r=e.checked,a=e[zt];if(ge(i)){let p=Ro(i,s),f=p!==-1;if(r&&!f)a(i.concat(s));else if(!r&&f){let y=[...i];y.splice(p,1),a(y)}}else if(St(i)){let p=new Set(i);r?p.add(s):p.delete(s),a(p)}else a(va(e,r))})},mounted:ca,beforeUpdate(e,t,o){e[zt]=An(o),ca(e,t,o)}};function ca(e,{value:t,oldValue:o},i){e._modelValue=t;let s;if(ge(t))s=Ro(t,i.props.value)>-1;else if(St(t))s=t.has(i.props.value);else{if(t===o)return;s=Nt(t,va(e,!0))}e.checked!==s&&(e.checked=s)}var fn={deep:!0,created(e,{value:t,modifiers:{number:o}},i){e._modelValue=t,nn(e,"change",()=>{let s=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>o?En(vo(f)):vo(f)),r=e.multiple,a=r?St(e._modelValue)?new Set(s):s:s[0],p=e._pendingValue=[r,r?ge(a)?s.slice():s:a];try{e[zt](a)}finally{je(()=>{e._pendingValue===p&&(e._pendingValue=void 0)})}}),e[zt]=An(i)},mounted(e,{value:t}){pa(e,t)},beforeUpdate(e,{value:t},o){e._modelValue=t,e[zt]=An(o)},updated(e,{value:t}){let o=e._pendingValue;e._pendingValue=void 0,(!o||o[0]!==e.multiple||!Tc(t,o[1],o[0]))&&pa(e,t)}};function Tc(e,t,o){if(!o)return Nt(e,t);if(ge(e))return Nt(e,t);if(St(e)){if(e.size!==t.length)return!1;for(let i of t)if(!e.has(i))return!1;return!0}return!1}function pa(e,t){let o=e.multiple,i=ge(t);if(!(o&&!i&&!St(t))){for(let s=0,r=e.options.length;s<r;s++){let a=e.options[s],p=vo(a);if(o)if(i){let f=typeof p;f==="string"||f==="number"?a.selected=t.some(y=>String(y)===String(p)):a.selected=Ro(t,p)>-1}else a.selected=t.has(p);else if(Nt(vo(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!o&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function vo(e){return"_value"in e?e._value:e.value}function va(e,t){let o=t?"_trueValue":"_falseValue";return o in e?e[o]:t}var _c=["ctrl","shift","alt","meta"],Ac={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>_c.some(o=>e[`${o}Key`]&&!t.includes(o))},ae=(e,t)=>{if(!e)return e;let o=e._withMods||(e._withMods={}),i=t.join(".");return o[i]||(o[i]=((s,...r)=>{for(let a=0;a<t.length;a++){let p=Ac[t[a]];if(p&&p(s,t))return}return e(s,...r)}))},Oc={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},yt=(e,t)=>{let o=e._withKeys||(e._withKeys={}),i=t.join(".");return o[i]||(o[i]=(s=>{if(!("key"in s))return;let r=Pt(s.key);if(t.some(a=>a===r||Oc[a]===r))return e(s)}))},Pc=He({patchProp:Sc},lc),fa;function Ic(){return fa||(fa=Wr(Pc))}var ga=((...e)=>{let t=Ic().createApp(...e),{mount:o}=t;return t.mount=i=>{let s=Vc(i);if(!s)return;let r=t._component;!Ce(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=o(s,!1,Mc(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Mc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Vc(e){return $e(e)?document.querySelector(e):e}var vn=typeof document<"u";function ba(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ba(e.default)}var Oe=Object.assign;function es(e,t){let o={};for(let i in t){let s=t[i];o[i]=Ct(s)?s.map(e):e(s)}return o}var Pn=()=>{},Ct=Array.isArray;function oi(e,t){let o={};for(let i in e)o[i]=i in t?t[i]:e[i];return o}var wa=/#/g,Lc=/&/g,$c=/\//g,Uc=/=/g,Fc=/\?/g,ka=/\+/g,Bc=/%5B/g,zc=/%5D/g,Ca=/%5E/g,Hc=/%60/g,Ea=/%7B/g,jc=/%7C/g,Sa=/%7D/g,Gc=/%20/g;function si(e){return e==null?"":encodeURI(""+e).replace(jc,"|").replace(Bc,"[").replace(zc,"]")}function Na(e){return si(e).replace(Ea,"{").replace(Sa,"}").replace(Ca,"^")}function ti(e){return si(e).replace(ka,"%2B").replace(Gc,"+").replace(wa,"%23").replace(Lc,"%26").replace(Hc,"`").replace(Ea,"{").replace(Sa,"}").replace(Ca,"^")}function Wc(e){return ti(e).replace(Uc,"%3D")}function Kc(e){return sLine truncated
${JSON.stringify(e)}${t?`
while being at
`+JSON.stringify(t):""}`},[Be.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${np(t)}" via a navigation guard.`},[Be.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[Be.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[Be.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function hn(e,t){return Oe(new Error,{type:e,[Ma]:!0},t)}function Ht(e,t){return e instanceof Error&&Ma in e&&(t==null||!!(e.type&t))}var tp=["params","query","hash"];function np(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let o of tp)o in e&&(t[o]=e[o]);return JSON.stringify(t,null,2)}function Va(e){let t={};if(e===""||e==="?")return t;let o=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;i<o.length;++i){let s=o[i].replace(ka," "),r=s.indexOf("="),a=On(r<0?s:s.slice(0,r)),p=r<0?null:On(s.slice(r+1));if(a in t){let f=t[a];Ct(f)||(f=t[a]=[f]),f.push(p)}else t[a]=p}return t}function di(e){let t="";for(let o in e){let i=e[o];if(o=Wc(o),i==null){i!==void 0&&(t+=(t.length?"&":"")+o);continue}(Ct(i)?i.map(s=>s&&ti(s)):[i&&ti(i)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+o,s!=null&&(t+="="+s))})}return t}function qa(e){let t={};for(let o in e){let i=e[o];i!==void 0&&(t[o]=Ct(i)?i.map(s=>s==null?null:""+s):i==null?i:""+i)}return t}var La=Symbol(""),ui=Symbol(""),ss=Symbol(""),is=Symbol(""),rs=Symbol("");function In(){let e=[];function t(i){return e.push(i),()=>{let s=e.indexOf(i);s>-1&&e.splice(s,1)}}function o(){e=[]}return{add:t,list:()=>e.slice(),reset:o}}function Xt(e,t,o,i,s,r=a=>a()){let a=i&&(i.enterCallbacks[s]=i.enterCallbacks[s]||[]);return()=>new Promise((p,f)=>{let y=m=>{m===!1?f(hn(Be.NAVIGATION_ABORTED,{from:o,to:t})):m instanceof Error?f(m):ep(m)?f(hn(Be.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(a&&i.enterCallbacks[s]===a&&typeof m=="function"&&a.push(m),p())},b=r(()=>e.call(i&&i.instances[s],t,o,y)),w=Promise.resolve(b);e.length<3&&(w=w.then(y)),w.catch(m=>f(m))})}function as(e,t,o,i,s=r=>r()){let r=[];for(let a of e)for(let p in a.components){let f=a.components[p];if(!(t!=="beforeRouteEnter"&&!a.instances[p]))if(ba(f)){let y=(f.__vccOpts||f)[t];y&&r.push(Xt(y,o,i,a,p,s))}else{let y=f();r.push(()=>y.then(b=>{if(!b)throw new Error(`Couldn't resolve component "${p}" at "${a.path}"`);let w=qc(b)?b.default:b;a.mods[p]=b,a.components[p]=w;let m=(w.__vccOpts||w)[t];return m&&Xt(m,o,i,a,p,s)()}))}}return r}function $a(e,t){let o=[],i=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let a=0;a<r;a++){let p=t.matched[a];p&&(e.matched.find(y=>mn(y,p))?i.push(p):o.push(p));let f=e.matched[a];f&&(t.matched.find(y=>mn(y,f))||s.push(f))}return[o,i,s]}var op=()=>location.protocol+"//"+location.host;function Ja(e,t){let{pathname:o,search:i,hash:s}=t,r=e.indexOf("#");if(r>-1){let a=s.includes(e.slice(r))?e.slice(r).length:1,p=s.slice(a);return p[0]!=="/"&&(p="/"+p),ii(p,"")}return ii(o,e)+i+s}function sp(e,t,o,i){let s=[],r=[],a=null,p=({state:m})=>{let E=Ja(e,location),I=o.value,C=t.value,v=0;if(m){if(o.value=E,t.value=m,a&&a===I){a=null;return}v=C?m.position-C.position:0}else i(E);s.forEach(S=>{S(o.value,I,{delta:v,type:ns.pop,direction:v?v>0?os.forward:os.back:os.unknown})})};function f(){a=o.value}function y(m){s.push(m);let E=()=>{let I=s.indexOf(m);I>-1&&s.splice(I,1)};return r.push(E),E}function b(){if(document.visibilityState==="hidden"){let{history:m}=window;if(!m.state)return;m.replaceState(Oe({},m.state,{scroll:go()}),"")}}function w(){for(let m of r)m();r=[],window.removeEventListener("popstate",p),window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",b)}return window.addEventListener("popstate",p),window.addEventListener("pagehide",b),document.addEventListener("visibilitychange",b),{pauseListeners:f,listen:y,destroy:w}}function Ua(e,t,o,i=!1,s=!1){return{back:e,current:t,forward:o,replaced:i,position:window.history.length,scroll:s?go():null}}function ip(e){let{history:t,location:o}=window,i={value:Ja(e,o)},s={value:t.state};s.value||r(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(f,y,b){let w=e.indexOf("#"),m=w>-1?(o.host&&document.querySelector("base")?e:e.slice(w))+f:op()+e+f;try{t[b?"replaceState":"pushState"](y,"",m),s.value=y}catch(E){console.error(E),o[b?"replace":"assign"](m)}}function a(f,y){r(f,Oe({},t.state,Ua(s.value.back,f,s.value.forward,!0),y,{position:s.value.position}),!0),i.value=f}function p(f,y){let b=Oe({},s.value,t.state,{forward:f,scroll:go()});r(b.current,b,!0),r(f,Oe({},Ua(i.value,f,null),{position:b.position+1},y),!1),i.value=f}return{location:i,state:s,push:p,replace:a}}function Qa(e){e=Ta(e);let t=ip(e),o=sp(e,t.state,t.location,t.replace);function i(r,a=!0){a||o.pauseListeners(),history.go(r)}let s=Oe({locatLine truncated
`+JSON.stringify(t):""}`},[Be.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${np(t)}" via a navigation guard.`},[Be.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[Be.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[Be.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function hn(e,t){return Oe(new Error,{type:e,[Ma]:!0},t)}function Ht(e,t){return e instanceof Error&&Ma in e&&(t==null||!!(e.type&t))}var tp=["params","query","hash"];function np(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let o of tp)o in e&&(t[o]=e[o]);return JSON.stringify(t,null,2)}function Va(e){let t={};if(e===""||e==="?")return t;let o=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;i<o.length;++i){let s=o[i].replace(ka," "),r=s.indexOf("="),a=On(r<0?s:s.slice(0,r)),p=r<0?null:On(s.slice(r+1));if(a in t){let f=t[a];Ct(f)||(f=t[a]=[f]),f.push(p)}else t[a]=p}return t}function di(e){let t="";for(let o in e){let i=e[o];if(o=Wc(o),i==null){i!==void 0&&(t+=(t.length?"&":"")+o);continue}(Ct(i)?i.map(s=>s&&ti(s)):[i&&ti(i)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+o,s!=null&&(t+="="+s))})}return t}function qa(e){let t={};for(let o in e){let i=e[o];i!==void 0&&(t[o]=Ct(i)?i.map(s=>s==null?null:""+s):i==null?i:""+i)}return t}var La=Symbol(""),ui=Symbol(""),ss=Symbol(""),is=Symbol(""),rs=Symbol("");function In(){let e=[];function t(i){return e.push(i),()=>{let s=e.indexOf(i);s>-1&&e.splice(s,1)}}function o(){e=[]}return{add:t,list:()=>e.slice(),reset:o}}function Xt(e,t,o,i,s,r=a=>a()){let a=i&&(i.enterCallbacks[s]=i.enterCallbacks[s]||[]);return()=>new Promise((p,f)=>{let y=m=>{m===!1?f(hn(Be.NAVIGATION_ABORTED,{from:o,to:t})):m instanceof Error?f(m):ep(m)?f(hn(Be.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(a&&i.enterCallbacks[s]===a&&typeof m=="function"&&a.push(m),p())},b=r(()=>e.call(i&&i.instances[s],t,o,y)),w=Promise.resolve(b);e.length<3&&(w=w.then(y)),w.catch(m=>f(m))})}function as(e,t,o,i,s=r=>r()){let r=[];for(let a of e)for(let p in a.components){let f=a.components[p];if(!(t!=="beforeRouteEnter"&&!a.instances[p]))if(ba(f)){let y=(f.__vccOpts||f)[t];y&&r.push(Xt(y,o,i,a,p,s))}else{let y=f();r.push(()=>y.then(b=>{if(!b)throw new Error(`Couldn't resolve component "${p}" at "${a.path}"`);let w=qc(b)?b.default:b;a.mods[p]=b,a.components[p]=w;let m=(w.__vccOpts||w)[t];return m&&Xt(m,o,i,a,p,s)()}))}}return r}function $a(e,t){let o=[],i=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let a=0;a<r;a++){let p=t.matched[a];p&&(e.matched.find(y=>mn(y,p))?i.push(p):o.push(p));let f=e.matched[a];f&&(t.matched.find(y=>mn(y,f))||s.push(f))}return[o,i,s]}var op=()=>location.protocol+"//"+location.host;function Ja(e,t){let{pathname:o,search:i,hash:s}=t,r=e.indexOf("#");if(r>-1){let a=s.includes(e.slice(r))?e.slice(r).length:1,p=s.slice(a);return p[0]!=="/"&&(p="/"+p),ii(p,"")}return ii(o,e)+i+s}function sp(e,t,o,i){let s=[],r=[],a=null,p=({state:m})=>{let E=Ja(e,location),I=o.value,C=t.value,v=0;if(m){if(o.value=E,t.value=m,a&&a===I){a=null;return}v=C?m.position-C.position:0}else i(E);s.forEach(S=>{S(o.value,I,{delta:v,type:ns.pop,direction:v?v>0?os.forward:os.back:os.unknown})})};function f(){a=o.value}function y(m){s.push(m);let E=()=>{let I=s.indexOf(m);I>-1&&s.splice(I,1)};return r.push(E),E}function b(){if(document.visibilityState==="hidden"){let{history:m}=window;if(!m.state)return;m.replaceState(Oe({},m.state,{scroll:go()}),"")}}function w(){for(let m of r)m();r=[],window.removeEventListener("popstate",p),window.removeEventListener("pagehide",b),document.removeEventListener("visibilitychange",b)}return window.addEventListener("popstate",p),window.addEventListener("pagehide",b),document.addEventListener("visibilitychange",b),{pauseListeners:f,listen:y,destroy:w}}function Ua(e,t,o,i=!1,s=!1){return{back:e,current:t,forward:o,replaced:i,position:window.history.length,scroll:s?go():null}}function ip(e){let{history:t,location:o}=window,i={value:Ja(e,o)},s={value:t.state};s.value||r(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(f,y,b){let w=e.indexOf("#"),m=w>-1?(o.host&&document.querySelector("base")?e:e.slice(w))+f:op()+e+f;try{t[b?"replaceState":"pushState"](y,"",m),s.value=y}catch(E){console.error(E),o[b?"replace":"assign"](m)}}function a(f,y){r(f,Oe({},t.state,Ua(s.value.back,f,s.value.forward,!0),y,{position:s.value.position}),!0),i.value=f}function p(f,y){let b=Oe({},s.value,t.state,{forward:f,scroll:go()});r(b.current,b,!0),r(f,Oe({},Ua(i.value,f,null),{position:b.position+1},y),!1),i.value=f}return{location:i,state:s,push:p,replace:a}}function Qa(e){e=_a(e);let t=ip(e),o=sp(e,t.state,t.location,t.replace);function i(r,a=!0){a||o.pauseListeners(),history.go(r)}let s=Oe({locatLine truncated
`)),e.options=Object.assign({},e.options,b.options),a.restore()})}p();let f=null;e.saveDefault=y=>{if(y&&y.preventDefault&&y.preventDefault(),e.saving)return;let b=a.checkpoint(),w={terms:e.terms.split(`
`).map(m=>m.trim()).filter(m=>m.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",w).then(()=>{a.accept(b),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",f&&i.cancel(f),f=i(()=>{e.message=null},2500)},m=>{e.saving=!1;let E=m&&m.data&&m.data.error,I="Unable to save your defaults. Please try again.";Promise.all([o("ERRORS."+E),o("ERRORS.unknown_error")]).then(([C,v])=>{e.error=E&&C!==v?C:I},()=>{e.error=I})})},e.deleteAccount=()=>{e.deletingAccount||!e.confirmDeleteAccount||e.deleteUsername!==e.user?.username||(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},ll=function(e,t,o){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(i=>{o.url("/dashboard")},i=>{e.error=i.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},dl=function(e,t,o,i,s){e.user&&!e.user.status&&o.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&o.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(p){e.feature=p},e.featureHref=function(p){return p.needsUser&&!e.user?"/signin":p.href},e.featureTarget=function(p){return p.needsUser&&!e.user?"_self":p.target||void 0},e.featureKeydown=function(p,f){let y={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[p.key];if(y===void 0)return;p.preventDefault();let b=e.features.length,w=y==="first"?0:y==="last"?b-1:(f+y+b)%b;e.feature=e.features[w].key,s(()=>{let m=i.document.getElementById("feature-tab-"+e.feature);m&&m.focus()})},e.demoText=`# DeepLearnUtils
Developed by Jane Smith at MIT CSAIL.
See Smith et al., "Attention That Works," 2026.
Contact: jane.smith@mit.edu`,e.demoTerms="Jane Smith, Smith, MIT CSAIL, jane.smith@mit.edu",e.demoParts=function(){let p=(e.demoTerms||"").split(/[,\n]/).map(m=>m.trim()).filter(Boolean).sort((m,E)=>E.length-m.length),f=m=>m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(!p.length)return[{text:e.demoText}];let y=new RegExp("("+p.map(f).join("|")+")","gi"),b={},w=0;return(e.demoText||"").split(y).filter(m=>m!=="").map(m=>{let E=p.find(I=>I.toLowerCase()===m.toLowerCase());return E?(b[E.toLowerCase()]||(b[E.toLowerCase()]=++w),{text:String(b[E.toLowerCase()]),redacted:!0,original:m}):{text:m}})},e.demoCount=()=>e.demoParts().filter(p=>p.redacted).length,e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function r(){t.get("/api/stat/").then(p=>{e.stat=p.data,e.cards[0].total=p.data.nbRepositories,e.cards[1].total=p.data.nbUsers,e.cards[2].total=p.data.nbPageViews,e.cards[3].total=p.data.nbPullRequests}).catch(()=>{})}r();function a(p){let f={series:p,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!p||p.length<2)return f;let y=new Array(p.length-1);for(let C=1;C<p.length;C++)y[C-1]=p[C]-p[C-1];let b=y.length,w=Math.max.apply(null,y),m=Math.min.apply(null,y),E=Math.min(0,m),I=w-E||1;f.viewW=b*2,f.bars=new Array(b);for(let C=0;C<b;C++){let v=(y[C]-E)/I,S=Math.max(1.5,v*34);f.bars[C]={x:(C*2+.25).toFixed(2),y:(36-S).toFixed(2),w:"1.5",h:S.toFixed(2)}}if(f.deltaToday=y[b-1],b>=2){let C=y[b-2];C&&(f.pctChange=(f.deltaToday-C)/C*100)}return f.pctAbs=Math.round(Math.abs(f.pctChange)),f.isUp=f.pctChange>=0,f}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(p=>{let f=p.data||[];e.history={repositories:a(f.map(y=>y.nbRepositories||0)),users:a(f.map(y=>y.nbUsers||0)),pageViews:a(f.map(y=>y.nbPageViews||0)),pullRequests:a(f.map(y=>y.nbPullRequests||0))}}).catch(()=>{})},ul=function(e,t,o,i,s,r){let a=ct();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,je(()=>document.querySelector(".dashboard-quota > summary")?.focus())},xt()(document,"click",R=>{e.quotaExpanded&&!R.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=R=>R.status==="error"||R._broken||f(R.status)==="progress"&&R._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=R=>{e.projectView=R,R==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=R=>"project-details-"+encodeURIComponent(R._type+":"+(R._id||R._source||"unknown")),e.showProjectDetails=async R=>{e.selectedProject=R,e.projectName=R.projectName||"",e.nameError="",e.nameMessage="",await je();let Y=document.getElementById(e.projectDetailsId(R));Y?.focus(),Y?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=R=>{e.selectedProject=null,je(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(R._type+":"+R._id)}"]`)?.focus())},e.saveProjectName=async R=>{if(e.nameSaving||!R._id)return;let Y=e.projectName.trim();if(Y.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let ne=await t.post("/api/user/project-name",{type:R._type,id:R._id,name:Y});R.projectName=ne.data.name,R._label=R.projectName||R._fallbackLabel,e.selectedProject===R&&(e.nameMessage=Y?"Project name saved.":"Default project name restored."),D||(e.dashboardCursor=null,await F(),e.selectedProject===R&&(e.selectedProject=e.items.find(ve=>ve._type===R._type&&ve._id===R._id)||null))}catch{e.selectedProject===R&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async R=>{if(!R._viewUrl||e.copyingId)return;let Y=new URL(R._viewUrl,s.location.origin).href;e.copyingId=R._type+":"+R._id;try{await sl(Y),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:Y})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let p=["queue","download","downloaded","preparing","anonymizing"];function f(R){return R==="ready"||R==="error"?R:R==="expired"||R==="expiring"?"expired":R==="removed"||R==="removing"?"removed":(p.indexOf(R)>-1,"progress")}let y=7200*1e3,b="dashboard.filterPrefs",w={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,e Line truncated
`)),e.options=Object.assign({},e.options,A.options),e.options.expirationDate=A.options&&A.options.expirationDate?new Date(A.options.expirationDate):G(),!i.repoId&&!i.pullRequestId&&!i.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),g&&g()})}function ee(g,T,A){e.anonymize&&e.anonymize[g]&&e.anonymize[g].setValidity(T,A)}function de(g){try{let T=parseGithubUrl(g);if(T&&T.owner&&T.repo)return T.owner+"/"+T.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!i.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||de(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let g=m();try{let T=await t.get("/github/connections");if(e.githubConnections=T.data,!T.data.appEnabled)return;let A=await t.post("/github/connections/migrate",{type:"repository",id:i.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":T.data.csrf}});if(!w(g))return;e.error=null,A.data.fullName&&(e._originalFullName=A.data.fullName,e.source.fullName=A.data.fullName,e.sourceUrl="https://github.com/"+A.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{w(g)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,E(g)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await ye()}catch{}}};function he(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:de(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function ke(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function be(){let g=new URLSearchParams(window.location.search).get("billingDraft");if(g){v.restore();try{let A=(await t.get("/api/billing/draft/"+encodeURIComponent(g))).data;if(A.path!==s.path())throw new Error("Wrong task");S=A.values.conference||null;for(let P of["sourceUrl","terms","repoId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(A.values,P)&&(e[P]=A.values[P]);return e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),D=A.id,V=JSON.stringify(v.checkpoint()),e.draftRestored=!0,e.hostingReview=!0,e.sourceUrl&&await ke(),s.replace?.(s.path()),!0}catch{e.billingError="The checkout draft could not be restored. Retry by reloading this page; any local draft is still available."}}let T;try{T=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!T||T.path!==s.path()||Date.now()-T.savedAt>=30*6e4)return v.restore()?(e.sourceUrl&&await ke(),!0):!1;v.restore();for(let A of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(T.draft,A)&&(e[A]=T.draft[A]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await ke(),sessionStorage.removeItem("github-access-draft"),!0}ve(()=>{!i.repoId&&!i.pullRequestId&&!i.gistId&&a(be,0),i.repoId&&i.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=i.repoId,t.get("/api/repo/"+e.repoId).then(async g=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(g.data.status),e.githubConnection=g.data.connection||"oauth",e.sourceUrl="https://github.com/"+g.data.source.fullName,e._originalFullName=g.data.source.fullName,e.terms=g.data.options.terms.filter(T=>T).join(`
`),e.source=g.data.source,e.role=g.data.role||"owner",e._existingNever=g.data.options.expirationMode==="never",e.coauthors=g.data.coauthors||[],e._originalBranch=g.data.source.branch,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,e.repositoryID=g.data.source.repositoryID,e._originalRepositoryID=g.data.source.repositoryID,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be()&&(await Promise.all([ye(),qe()]),Ie())},()=>{s.url("/404")})),i.pullRequestId&&i.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=i.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async g=>{if(e.githubConnection=g.data.connection||"oauth",e.sourceUrl="https://github.com/"+g.data.source.repositoryFullName+"/pull/"+g.data.source.pullRequestId,e.terms=g.data.options.terms.filter(T=>T).join(`
`),e.source=g.data.source,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be())try{await z()}catch{}},()=>{s.url("/404")})),i.gistId&&i.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=i.gistId,t.get("/api/gist/"+e.gistId).then(async g=>{e.sourceUrl="https://gist.github.com/"+g.data.source.gistId,e.terms=g.data.options.terms.filter(T=>T).join(`
`),e.source=g.data.source,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be()&&await J()},()=>{s.url("/404")}))}),t.get("/github/connections").then(g=>{e.githubConnections=g.data,!i.repoId&&!i.pullRequestId&&!i.gistId&&e.githubConnection===void 0&&g.data.appEnabled&&g.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&ke())}).catch(()=>{}),e.urlSelected=async(g=!1)=>{let T=++f;e.previousConfigurations=[],e.previousConfigurationId="";let A;try{A=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,Ve.cancel(),M.cancel(),re.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",ee("sourceUrl","github",!1);return}let P=C(A),U=g||I===P;I=P,e.sourceUrlError="",ee("sourceUrl","github",!0);let B=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,setTimeout(()=>{let se=window.document.getElementById("sourceUrl");if(se){try{se.setSelectionRange(0,0)}catch{}se.scrollLeft=0}},50),B&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!U&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],U||(e.source={type:"GitHubStream",branch:"",commit:""}),Ve.cancel(),M.cancel(),re.cancel(),Z.clear(),K.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=U;try{A.gistId&&!A.repo?(e.detectedType="gist",e.source={gistId:A.gistId},await J()):A.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:A.owner+"/"+A.repo,pullRequestId:A.pullRequestId},await z()):(e.detectedType="repo",ne(),await Promise.all([ye(),qe()]),Ie())}catch{}finally{T===f&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let g=e.branches.filter(A=>A.name==e.source.branch)[0];if(!g)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=g.commit),e.readme=g.readme,await qe(),Ie()}),e.getBranches=async g=>{let T=parseGithubUrl(e.sourceUrl),A=m();try{let P=await t.get(`/api/repo/${T.owner}/${T.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:g===!0||e.reconnectingSource?"1":"0",repositoryID:he()}});if(!w(A))return;e.branches=P.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let U=e.branches.filter(B=>B.name==e.source.branch);U.length>0&&(!(!e.reconnectingSource&&!g&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=U[0].commit),e.readme=U[0].readme,await qe(g))}catch(P){if(!w(A))return;e.branches=[],e.sourceUnreachable=P&&(P.status===404||P.data&&P.data.error==="repo_not_found");let U=P&&P.data&&P.data.error||(P&&P.status===404?"repo_not_found":"unknown_error");r("ERRORS."+U).then(B=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:B}),e.error=B},console.error),typeof ee=="function"&&ee("sourceUrl","missing",!1)}finally{E(A)}};async function ye(){let g=parseGithubUrl(e.sourceUrl),T=m();try{N();let A=await t.get(`/api/repo/${g.owner}/${g.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,repositoryID:he(),force:"1"}});if(!w(T))return;e.details=A.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(A){if(!w(T))return;throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(T)}}async function qe(g){if(e.readme&&!g)return e.readme;let T=parseGithubUrl(e.sourceUrl),A=m();try{let P=await t.get(`/api/repo/${T.owner}/${T.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:g===!0?"1":"0",branch:e.source.branch,repositoryID:he()}});w(A,!0)&&(e.readme=P.data)}catch{w(A,!0)&&(e.readme="")}finally{E(A)}}function ze(){let g={terms:e.terms?e.terms.split(`
`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(g.branchName=e.source.branch);try{let T=parseGithubUrl(e.sourceUrl);g.repoName=`${T.owner}/${T.repo}`}catch{}return g}function We(g,T,A){let P=null,U=0,B=()=>{if(e.detectedType!==g)return;P&&a.cancel(P);let se=++U;e.previewStatus="loading",P=a(()=>{P=null;let x=T();if(!x){e.previewStatus="idle";return}t.post("/api/anonymize-preview",x).then(ae=>{se===U&&(A(ae.data,x),e.previewStatus="ready")}).catch(()=>{se===U&&(e.previewStatus="error")})},200)};return B.cancel=()=>{U++,P&&a.cancel(P),P=null},e.on("dispose",B.cancel),B}e.retryPreview=()=>{e.detectedType==="repo"&&Ve(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()};let Ve=We("repo",()=>e.readme?{content:e.readme,options:ze()}:null,g=>{if(typeof g?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=g.content;let T="";try{let P=parseGithubUrl(e.sourceUrl),U=e.source.branch||e.details&&e.details.defaultBranch||"main";T=`https://github.com/${P.owner}/${P.repo}/raw/${U}/`}catch{}let A=renderMD(e.anonymize_readme,T);e.html_readme=A,a(Prism.highlightAll,150)});function Ie(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),Ve())}async function z(){let g=parseGithubUrl(e.sourceUrl),T=m();try{N();let A=await t.get(`/api/pr/${g.owner}/${g.repo}/${g.pullRequestId}`,{params:{connection:e.githubConnection}});if(!w(T))return;e.details=A.data,e.pullRequestId||(e.pullRequestId=g.repo+"-PR"+g.pullRequestId+"-"+generateRandomId(4))}catch(A){if(!w(T))return;throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(T)}}let Z=Ue(new Map);function Q(){let g=new Set,T=e.details&&e.details.pullRequest;if(!T)return g;typeof T.title=="string"&&g.add(T.title),typeof T.body=="string"&&g.add(T.body),typeof T.diff=="string"&&g.add(T.diff);let A=T.comments||[];for(let P of A)typeof P.author=="string"&&g.add(P.author),typeof P.body=="string"&&g.add(P.body);return g}let M=We("pr",()=>{let g=Q(),T=Array.from(g);return T.length===0?null:{contents:T,options:ze()}},(g,T)=>{if(!Array.isArray(g?.contents)||g.contents.length!==T.contents.length||g.contents.some(U=>typeof U!="string"))throw Error("Invalid preview response");let A=T.contents,P=new Map;for(let U=0;U<A.length&&U<g.contents.length;U++)P.set(A[U],g.contents[U]);Z.clear(),P.forEach((U,B)=>Z.set(B,U))});e.anonymizePrContent=function(g){return g&&(Z.has(g)?Z.get(g):"")};async function J(){let g=parseGithubUrl(e.sourceUrl),T=m();try{N(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let A=await t.get(`/api/gist/source/${g.gistId}`);if(!w(T))return;e.details=A.data,e.gistId||(e.gistId="gist-"+g.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(A){if(!w(T))return;if(A.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,ee("sourceUrl","missing",!1);return}if(A.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,ee("sourceUrl","missing",!1);return}throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(T)}}let K=Ue(new Map);function j(){let g=new Set,T=e.details&&e.details.gist;if(!T)return g;typeof T.description=="string"&&g.add(T.description),typeof T.ownerLogin=="string"&&g.add(T.ownerLogin);let A=T.files||[];for(let U of A)typeof U.filename=="string"&&g.add(U.filename),typeof U.content=="string"&&g.add(U.content);let P=T.comments||[];for(let U of P)typeof U.author=="string"&&g.add(U.author),typeof U.body=="string"&&g.add(U.body);return g}let re=We("gist",()=>{let g=j(),T=Array.from(g);return T.length===0?null:{contents:T,options:ze()}},(g,T)=>{if(!Array.isArray(g?.contents)||g.contents.length!==T.contents.length||g.contents.some(U=>typeof U!="string"))throw Error("Invalid preview response");let A=T.contents,P=new Map;for(let U=0;U<A.length&&U<g.contents.length;U++)P.set(A[U],g.contents[U]);K.clear(),P.forEach((U,B)=>K.set(B,U)),pe()});e.anonymizeGistContent=function(g){return g&&(K.has(g)?K.get(g):"")},e.previewGistFiles=[];function pe(){let g=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=g.map(T=>({filename:e.anonymizeGistContent(T.filename),content:e.anonymizeGistContent(T.content),language:T.language}))}e.watch("details.gist.files",pe,!0),e.watch("terms",pe);function k(){let g=e.conference;if(e.conference_data=null,!g)return;let T=g===S||e.isUpdate&&g===e._originalConference;g!==S&&(S=null),t.get("/api/conferences/"+g).then(A=>{e.conference===g&&(e.conference_data=A.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!T&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.opti Line truncated
`).filter(B=>B),connection:e.githubConnection,fullName:`${A.owner}/${A.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(P.options.pageSource=e.details.pageSource),N();let U=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/status/"+e.repoId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error),["quota_exceeded","subscription_required_for_never_expiration"].includes(B.data.error)&&(B.data.error==="subscription_required_for_never_expiration"&&(e._existingNever=!1),e.hostingQuotaBlocked=!0,e.hostingReview=!0,je(()=>document.getElementById("repository-hosting")?.scrollIntoView({block:"center"}))))}).finally(()=>{T.disabled=!1})},e.anonymizeGist=g=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(q())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let T=g.currentTarget||g.target.closest?.("button")||g.target;T.disabled=!0;let A=parseGithubUrl(e.sourceUrl),P={gistId:e.gistId,terms:e.terms.trim().split(`
`).filter(B=>B),source:{gistId:A.gistId},options:e.options,conference:e.conference};N();let U=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/gist/"+e.gistId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error))}).finally(()=>{T.disabled=!1})},e.anonymizePullRequest=g=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(q())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let T=g.currentTarget||g.target.closest?.("button")||g.target;T.disabled=!0;let A=parseGithubUrl(e.sourceUrl),P={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(`
`).filter(B=>B),source:{repositoryFullName:`${A.owner}/${A.repo}`,pullRequestId:A.pullRequestId},options:e.options,conference:e.conference};N();let U=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/pr/"+e.pullRequestId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error))}).finally(()=>{T.disabled=!1})},e.watch("conference",()=>{k()}),e.watch("terms",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("options.image",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("options.link",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("details",()=>{e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()},!0)},vi=function(e,t,o,i,s,r){let a=ct();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",z=>nl(z.element)),window.Prism.redactionHook=!0);let p=xt();e.on("dark-mode",(z,Z)=>{e.aceOption&&(Z?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let f=0,y=null,b=null;e.fileLoadingSlow=!1,e.fileReceivedBytes=0;function w(){y&&(y.resolve(),y=null),b&&(a.timeout.cancel(b),b=null)}let m=!1;e.on("dispose",()=>{m=!0,f++,w(),E&&E.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,p(document,"click",z=>{e.symbolsOpen&&!z.target.closest?.(".symbols")&&(e.symbolsOpen=!1),e.moreOpen&&!z.target.closest?.(".tb-more")&&(e.moreOpen=!1),e.accountOpen&&!z.target.closest?.(".acct")&&(e.accountOpen=!1),e.helpOpen&&!z.target.closest?.(".vb-help")&&(e.helpOpen=!1)}),p(document,"keydown",z=>{z.key==="Escape"&&(e.symbolsOpen=!1,e.moreOpen=!1,e.accountOpen=!1,e.helpOpen=!1),(z.ctrlKey||z.metaKey)&&!z.altKey&&z.key&&z.key.toLowerCase()==="f"&&e.type==="html"&&window.document.querySelector(".reading-layout")&&(z.preventDefault(),e.toggleMdFind(!0))}),p(document,"keydown",function(z){if((z.metaKey||z.ctrlKey)&&z.key==="k"){z.preventDefault();var Z=document.querySelector(".tree-search-input");Z&&(Z.focus(),Z.select())}});var E=null;e.onFileSearchChange=function(){E&&(E.resolve(),E=null);let z=e.fileSearchQuery;if(!z||z.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let Z=r.defer();E=Z,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(z)}`,{timeout:Z.promise}).then(function(Q){if(!(m||E!==Z)){E=null,e.fileSearchLoading=!1;var M={};e.files.forEach(function(U){M[(U.path||"")+"/"+U.name]=!0});for(var J=[],K={},j=0;j<Q.data.length;j++){var re=Q.data[j];if(re.path)for(var pe=re.path.split("/"),k="",N=0;N<pe.length;N++){var q=k;k=k?k+"/"+pe[N]:pe[N];var H=q+"/"+pe[N];!M[H]&&!K[H]&&(K[H]=!0,J.push({name:pe[N],path:q}))}}J.sort(function(U,B){return(U.path||"").split("/").length-(B.path||"").split("/").length}),J.length>0&&e.files.push.apply(e.files,J);for(var g=[],T=0;T<Q.data.length;T++){var A=Q.data[T],P=(A.path||"")+"/"+A.name;!M[P]&&A.size!=null&&(g.push(A),M[P]=!0)}g.length>0&&e.files.push.apply(e.files,g),e.fileSearchResults=Q.data}},function(){!m&&E===Z&&(E=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let I={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},C=["license","txt"],v=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],S=["wav","mp3","ogg","wma","flac","aac","m4a"],D=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(z,Z){if(e.repoId!=i.repoId)return Ie();if((i.path||"")!=e.filePath){e.filePath=i.path||"",e.paths=e.filePath.split("/").filter(Q=>Q&&Q.trim().length>0),Ve();for(let Q=0;Q<e.paths.length-1;Q++){let M=Q>0?e.paths.slice(0,Q).join("/"):"";e.files.some(K=>K.path===M)||e.getFiles(M)}}});function V(){if(e.paths[0]!="")return;let z=["readme.md","readme.txt","readme.org","readme.1st","readme"],Z={};for(let M of e.files)M.name.toLowerCase().indexOf("readme")>-1&&(Z[M.name.toLowerCase()]=M.name);let Q=null;for(let M of z)if(Z[M]){Q=M;break}if(!Q&&Object.keys(Z).length>0&&(Q=Object.keys(Z)[0]),Q){let M=o.url();M[M.length-1]!="/"&&(M+="/"),o.url(M+encodePathForUrl(Z[Q]))}}e.fileCounts=null;let F=0,L=new Set,G=!1;e.getFiles=function(z,Z=!1){let Q=e.repoId,M=F;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(z)}&v=${e.options.lastUpdateDate}`).then(function(J){if(m||Q!==e.repoId||M!==F)return[];let K=z||"";return e.files=e.files.filter(j=>j.path!==K),e.files.push(...J.data),ie(K,M),J.data},function(J){if(m||Q!==e.repoId||M!==F)return[];Z||(e.type="error",e.content=hi(J),e.files=[])})};function ie(z,Z){if(G||L.has(z))return;L.add(z);let Q=e.repoId;t.get(`/api/repo/${e.repoId}/files/counts?path=${encodeURIComponent(z)}`).then(function(M){m||Q!==e.repoId||Z!==F||(e.fileCounts= Line truncated
`).forEach((Z,Q)=>{for(let[M,J]of de){let K=M.exec(Z);if(K&&!/^(if|for|while|switch|return|catch)$/.test(K[1])){z.push({name:K[1],kind:J,line:Q+1});break}}}),he={content:e.content,list:z.slice(0,300)},he.list},e.goToSymbol=function(z){e.symbolsOpen=!1;let Z=e.codeEditor;Z&&(Z.scrollToLine(z-1,!0,!0,()=>{}),Z.gotoLine(z,0,!0),window.history.replaceState(null,"",window.location.pathname+window.location.search+"#L"+z),window.dispatchEvent(new HashChangeEvent("hashchange")))},e.gotoLine=function(){let z=e.codeEditor;z&&(z.focus(),z.execCommand("gotoline"))},e.rootEntries=function(){return[...e.files||[]].sort((z,Z)=>{let Q=z.size==null,M=Z.size==null;return Q!==M?Q?-1:1:z.name.localeCompare(Z.name)})},e.formatSize=function(z){if(z==null)return"";if(z<1024)return z+" B";let Z=z/1024;return Z<1024?Z.toFixed(1)+" KB":(Z/1024).toFixed(1)+" MB"},e.fileSize=function(z){if(!z)return null;let Z=z.replace(/^\/+/,""),Q=(e.files||[]).find(M=>(M.path?M.path+"/":"")+M.name===Z);return Q&&Q.size!=null?Q.size:null},e.revealFolder=function(z){e.sidebarHidden=!1,e.sidebarCollapsed=!1,je(()=>{let Z=window.document.querySelector('.files a[data-path="/'+(window.CSS?.escape?window.CSS.escape(z):z)+'"]');Z&&(Z.closest("li")?.classList.contains("open")||Z.click(),Z.scrollIntoView({block:"nearest"}),Z.focus())})};let ke=/\bXXXX-\d+\b/g;e.redactionCount=function(){return typeof e.content!="string"?0:((e.type==="html"?e.content.replace(/<[^>]*>/g," "):e.content).match(ke)||[]).length},e.renderRedacted=function(z){if(!z||z.indexOf("XXXX-")===-1||typeof window.DOMParser!="function")return z;let Z=new window.DOMParser().parseFromString("<div>"+z+"</div>","text/html"),Q=Z.createTreeWalker(Z.body,4),M=[];for(;Q.nextNode();)ke.test(Q.currentNode.nodeValue)&&M.push(Q.currentNode);for(let J of M){ke.lastIndex=0;let K=Z.createDocumentFragment(),j=0,re,pe=J.nodeValue;for(;re=ke.exec(pe);){K.appendChild(Z.createTextNode(pe.slice(j,re.index)));let k=Z.createElement("mark");k.className="redact-chip",k.setAttribute("title","Redacted term "+re[0].slice(5)+" \u2014 the same term everywhere in this snapshot");let N=re[0].slice(5);k.textContent="";let q=Z.createElement("i");q.textContent=N,k.appendChild(q),k.dataset.term=re[0],k.setAttribute("aria-label","Redacted term "+N);let H=/^[.,;:!?)\]]+/.exec(pe.slice(re.index+re[0].length));if(H){let g=Z.createElement("span");g.className="redact-glue",g.appendChild(k),g.appendChild(Z.createTextNode(H[0])),K.appendChild(g),j=re.index+re[0].length+H[0].length}else K.appendChild(k),j=re.index+re[0].length}K.appendChild(Z.createTextNode(pe.slice(j))),J.parentNode.replaceChild(K,J)}return Z.body.firstChild.innerHTML};let be=z=>z.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,60)||"section";e.renderReadme=function(z){let Z=e.renderRedacted(z);if(!Z||typeof window.DOMParser!="function")return Z;let Q=new window.DOMParser().parseFromString("<div>"+Z+"</div>","text/html"),M={};return Q.querySelectorAll("h1, h2, h3").forEach(J=>{let K=J.id||be(J.textContent);M[K]?K+="-"+ ++M[K]:M[K]=1,J.id=K}),Q.body.firstChild.innerHTML};let ye={content:null,list:[]};e.readmeToc=function(){if(e.type!=="html"||typeof e.content!="string")return[];if(ye.content===e.content)return ye.list;let Z=[...new window.DOMParser().parseFromString("<div>"+e.renderReadme(e.sanitize?e.sanitize(e.content):e.content)+"</div>","text/html").querySelectorAll("h2, h3")].map(Q=>({id:Q.id,text:Q.textContent.trim(),level:Q.tagName==="H3"?3:2})).slice(0,40);return ye={content:e.content,list:Z},Z},e.activeHeading=null,p(window,"scroll",()=>{let z=e.readmeToc?e.readmeToc():[];if(!z.length)return;let Z=150,Q="",M="";for(let J of z){let K=window.document.getElementById(J.id);if(!K)continue;let j=K.getBoundingClientRect().top;j<Z?Q=J.id:!M&&j<window.innerHeight-80&&(M=J.id)}M&&(Q=M),e.activeHeading!==Q&&(e.activeHeading=Q)},{capture:!0,passive:!0}),e.scrollToHeading=function(z){if(!z){(window.document.querySelector(".explorer-content, .file-card-body, .main-pane")||window).scrollTo({top:0,behavior:"smooth"}),e.activeHeading="";return}let Z=window.document.getElementById(z);Z&&Z.scrollIntoView({behavior:"smooth",block:"start"}),e.activeHeading=z},e.redactParts=function(z){let Z=[],Q=0,M,J=/\bXXXX-(\d+)\b/g;for(z=String(z||"");M=J.exec(z);)M.index>Q&&Z.push({t:z.slice(Q,M.index)}),Z.push({n:M[1]}),Q=M.index+M[0].length;return Q<z.length&&Z.push({t:z.slice(Q)}),Z},e.pathCopied=!1,e.copyPath=async function(){window.navigator.clipboard?.writeText&&(await window.navigator.clipboard.writeText(e.filePath||""),e.pathCopied=!0,setTimeout(()=>{e.pathCopied=!1},1600))},e.contentCopied=!1,e.copyContent=async function(){if(typeof e.content!="string"||!window.navigator.clipboard?.writeText)return;let z=e.content;if(e.type==="html"&&e.url)try{z=await(await window.fetch(e.url,{credentials:"same-origin"})).text()}catch{return}await window.navigator.clipboard.writeText(z),e.contentCopied=!0,setTimeout(()=>{e.contentCopied=!1},1600)};function qe(z){return I[ Line truncated
Contact: jane.smith@mit.edu`,e.demoTerms="Jane Smith, Smith, MIT CSAIL, jane.smith@mit.edu",e.demoParts=function(){let p=(e.demoTerms||"").split(/[,\n]/).map(m=>m.trim()).filter(Boolean).sort((m,E)=>E.length-m.length),f=m=>m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(!p.length)return[{text:e.demoText}];let y=new RegExp("("+p.map(f).join("|")+")","gi"),b={},w=0;return(e.demoText||"").split(y).filter(m=>m!=="").map(m=>{let E=p.find(I=>I.toLowerCase()===m.toLowerCase());return E?(b[E.toLowerCase()]||(b[E.toLowerCase()]=++w),{text:String(b[E.toLowerCase()]),redacted:!0,original:m}):{text:m}})},e.demoCount=()=>e.demoParts().filter(p=>p.redacted).length,e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}];function r(){t.get("/api/stat/").then(p=>{e.stat=p.data,e.cards[0].total=p.data.nbRepositories,e.cards[1].total=p.data.nbUsers,e.cards[2].total=p.data.nbPageViews,e.cards[3].total=p.data.nbPullRequests}).catch(()=>{})}r();function a(p){let f={series:p,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!p||p.length<2)return f;let y=new Array(p.length-1);for(let C=1;C<p.length;C++)y[C-1]=p[C]-p[C-1];let b=y.length,w=Math.max.apply(null,y),m=Math.min.apply(null,y),E=Math.min(0,m),I=w-E||1;f.viewW=b*2,f.bars=new Array(b);for(let C=0;C<b;C++){let v=(y[C]-E)/I,S=Math.max(1.5,v*34);f.bars[C]={x:(C*2+.25).toFixed(2),y:(36-S).toFixed(2),w:"1.5",h:S.toFixed(2)}}if(f.deltaToday=y[b-1],b>=2){let C=y[b-2];C&&(f.pctChange=(f.deltaToday-C)/C*100)}return f.pctAbs=Math.round(Math.abs(f.pctChange)),f.isUp=f.pctChange>=0,f}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(p=>{let f=p.data||[];e.history={repositories:a(f.map(y=>y.nbRepositories||0)),users:a(f.map(y=>y.nbUsers||0)),pageViews:a(f.map(y=>y.nbPageViews||0)),pullRequests:a(f.map(y=>y.nbPullRequests||0))}}).catch(()=>{})},ul=function(e,t,o,i,s,r){let a=ct();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,je(()=>document.querySelector(".dashboard-quota > summary")?.focus())},xt()(document,"click",R=>{e.quotaExpanded&&!R.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=R=>R.status==="error"||R._broken||f(R.status)==="progress"&&R._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=R=>{e.projectView=R,R==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.projectDetailsId=R=>"project-details-"+encodeURIComponent(R._type+":"+(R._id||R._source||"unknown")),e.showProjectDetails=async R=>{e.selectedProject=R,e.projectName=R.projectName||"",e.nameError="",e.nameMessage="",await je();let Q=document.getElementById(e.projectDetailsId(R));Q?.focus(),Q?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=R=>{e.selectedProject=null,je(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(R._type+":"+R._id)}"]`)?.focus())},e.saveProjectName=async R=>{if(e.nameSaving||!R._id)return;let Q=e.projectName.trim();if(Q.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let ne=await t.post("/api/user/project-name",{type:R._type,id:R._id,name:Q});R.projectName=ne.data.name,R._label=R.projectName||R._fallbackLabel,e.selectedProject===R&&(e.nameMessage=Q?"Project name saved.":"Default project name restored."),D||(e.dashboardCursor=null,await F(),e.selectedProject===R&&(e.selectedProject=e.items.find(ve=>ve._type===R._type&&ve._id===R._id)||null))}catch{e.selectedProject===R&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async R=>{if(!R._viewUrl||e.copyingId)return;let Q=new URL(R._viewUrl,s.location.origin).href;e.copyingId=R._type+":"+R._id;try{await sl(Q),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:Q})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"In progress",error:"Error",expired:"Expired",removed:"Removed"};let p=["queue","download","downloaded","preparing","anonymizing"];function f(R){return R==="ready"||R==="error"?R:R==="expired"||R==="expiring"?"expired":R==="removed"||R==="removing"?"removed":(p.indexOf(R)>-1,"progress")}let y=7200*1e3,b="dashboard.filterPrefs",w={typeFilter:"all",filters:{status:{ready:!0,progress:!0,error:!0,e Line truncated
`)),e.options=Object.assign({},e.options,A.options),e.options.expirationDate=A.options&&A.options.expirationDate?new Date(A.options.expirationDate):G(),!i.repoId&&!i.pullRequestId&&!i.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),g&&g()})}function ee(g,_,A){e.anonymize&&e.anonymize[g]&&e.anonymize[g].setValidity(_,A)}function de(g){try{let _=parseGithubUrl(g);if(_&&_.owner&&_.repo)return _.owner+"/"+_.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!i.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||de(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let g=m();try{let _=await t.get("/github/connections");if(e.githubConnections=_.data,!_.data.appEnabled)return;let A=await t.post("/github/connections/migrate",{type:"repository",id:i.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":_.data.csrf}});if(!w(g))return;e.error=null,A.data.fullName&&(e._originalFullName=A.data.fullName,e.source.fullName=A.data.fullName,e.sourceUrl="https://github.com/"+A.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{w(g)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,E(g)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await ye()}catch{}}};function he(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:de(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function ke(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function be(){let g=new URLSearchParams(window.location.search).get("billingDraft");if(g){v.restore();try{let A=(await t.get("/api/billing/draft/"+encodeURIComponent(g))).data;if(A.path!==s.path())throw new Error("Wrong task");S=A.values.conference||null;for(let P of["sourceUrl","terms","repoId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(A.values,P)&&(e[P]=A.values[P]);return e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),D=A.id,V=JSON.stringify(v.checkpoint()),e.draftRestored=!0,e.hostingReview=!0,e.sourceUrl&&await ke(),s.replace?.(s.path()),!0}catch{e.billingError="The checkout draft could not be restored. Retry by reloading this page; any local draft is still available."}}let _;try{_=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!_||_.path!==s.path()||Date.now()-_.savedAt>=30*6e4)return v.restore()?(e.sourceUrl&&await ke(),!0):!1;v.restore();for(let A of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(_.draft,A)&&(e[A]=_.draft[A]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await ke(),sessionStorage.removeItem("github-access-draft"),!0}ve(()=>{!i.repoId&&!i.pullRequestId&&!i.gistId&&a(be,0),i.repoId&&i.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=i.repoId,t.get("/api/repo/"+e.repoId).then(async g=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(g.data.status),e.githubConnection=g.data.connection||"oauth",e.sourceUrl="https://github.com/"+g.data.source.fullName,e._originalFullName=g.data.source.fullName,e.terms=g.data.options.terms.filter(_=>_).join(`
`),e.source=g.data.source,e.role=g.data.role||"owner",e._existingNever=g.data.options.expirationMode==="never",e.coauthors=g.data.coauthors||[],e._originalBranch=g.data.source.branch,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,e.repositoryID=g.data.source.repositoryID,e._originalRepositoryID=g.data.source.repositoryID,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be()&&(await Promise.all([ye(),qe()]),Ie())},()=>{s.url("/404")})),i.pullRequestId&&i.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=i.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async g=>{if(e.githubConnection=g.data.connection||"oauth",e.sourceUrl="https://github.com/"+g.data.source.repositoryFullName+"/pull/"+g.data.source.pullRequestId,e.terms=g.data.options.terms.filter(_=>_).join(`
`),e.source=g.data.source,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be())try{await z()}catch{}},()=>{s.url("/404")})),i.gistId&&i.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=i.gistId,t.get("/api/gist/"+e.gistId).then(async g=>{e.sourceUrl="https://gist.github.com/"+g.data.source.gistId,e.terms=g.data.options.terms.filter(_=>_).join(`
`),e.source=g.data.source,e.options=Object.assign({},e.options,g.data.options),e.conference=g.data.conference,e._originalConference=g.data.conference,g.data.options.expirationDate&&(e.options.expirationDate=new Date(g.data.options.expirationDate)),I=C(parseGithubUrl(e.sourceUrl)),!await be()&&await X()},()=>{s.url("/404")}))}),t.get("/github/connections").then(g=>{e.githubConnections=g.data,!i.repoId&&!i.pullRequestId&&!i.gistId&&e.githubConnection===void 0&&g.data.appEnabled&&g.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&ke())}).catch(()=>{}),e.urlSelected=async(g=!1)=>{let _=++f;e.previousConfigurations=[],e.previousConfigurationId="";let A;try{A=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,Ve.cancel(),M.cancel(),re.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",ee("sourceUrl","github",!1);return}let P=C(A),U=g||I===P;I=P,e.sourceUrlError="",ee("sourceUrl","github",!0);let B=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,setTimeout(()=>{let se=window.document.getElementById("sourceUrl");if(se){try{se.setSelectionRange(0,0)}catch{}se.scrollLeft=0}},50),B&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!U&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],U||(e.source={type:"GitHubStream",branch:"",commit:""}),Ve.cancel(),M.cancel(),re.cancel(),J.clear(),K.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=U;try{A.gistId&&!A.repo?(e.detectedType="gist",e.source={gistId:A.gistId},await X()):A.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:A.owner+"/"+A.repo,pullRequestId:A.pullRequestId},await z()):(e.detectedType="repo",ne(),await Promise.all([ye(),qe()]),Ie())}catch{}finally{_===f&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let g=e.branches.filter(A=>A.name==e.source.branch)[0];if(!g)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=g.commit),e.readme=g.readme,await qe(),Ie()}),e.getBranches=async g=>{let _=parseGithubUrl(e.sourceUrl),A=m();try{let P=await t.get(`/api/repo/${_.owner}/${_.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:g===!0||e.reconnectingSource?"1":"0",repositoryID:he()}});if(!w(A))return;e.branches=P.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let U=e.branches.filter(B=>B.name==e.source.branch);U.length>0&&(!(!e.reconnectingSource&&!g&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=U[0].commit),e.readme=U[0].readme,await qe(g))}catch(P){if(!w(A))return;e.branches=[],e.sourceUnreachable=P&&(P.status===404||P.data&&P.data.error==="repo_not_found");let U=P&&P.data&&P.data.error||(P&&P.status===404?"repo_not_found":"unknown_error");r("ERRORS."+U).then(B=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:B}),e.error=B},console.error),typeof ee=="function"&&ee("sourceUrl","missing",!1)}finally{E(A)}};async function ye(){let g=parseGithubUrl(e.sourceUrl),_=m();try{N();let A=await t.get(`/api/repo/${g.owner}/${g.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,repositoryID:he(),force:"1"}});if(!w(_))return;e.details=A.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(A){if(!w(_))return;throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(_)}}async function qe(g){if(e.readme&&!g)return e.readme;let _=parseGithubUrl(e.sourceUrl),A=m();try{let P=await t.get(`/api/repo/${_.owner}/${_.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&de(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:g===!0?"1":"0",branch:e.source.branch,repositoryID:he()}});w(A,!0)&&(e.readme=P.data)}catch{w(A,!0)&&(e.readme="")}finally{E(A)}}function ze(){let g={terms:e.terms?e.terms.split(`
`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(g.branchName=e.source.branch);try{let _=parseGithubUrl(e.sourceUrl);g.repoName=`${_.owner}/${_.repo}`}catch{}return g}function We(g,_,A){let P=null,U=0,B=()=>{if(e.detectedType!==g)return;P&&a.cancel(P);let se=++U;e.previewStatus="loading",P=a(()=>{P=null;let x=_();if(!x){e.previewStatus="idle";return}t.post("/api/anonymize-preview",x).then(le=>{se===U&&(A(le.data,x),e.previewStatus="ready")}).catch(()=>{se===U&&(e.previewStatus="error")})},200)};return B.cancel=()=>{U++,P&&a.cancel(P),P=null},e.on("dispose",B.cancel),B}e.retryPreview=()=>{e.detectedType==="repo"&&Ve(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()};let Ve=We("repo",()=>e.readme?{content:e.readme,options:ze()}:null,g=>{if(typeof g?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=g.content;let _="";try{let P=parseGithubUrl(e.sourceUrl),U=e.source.branch||e.details&&e.details.defaultBranch||"main";_=`https://github.com/${P.owner}/${P.repo}/raw/${U}/`}catch{}let A=renderMD(e.anonymize_readme,_);e.html_readme=A,a(Prism.highlightAll,150)});function Ie(){!e.anonymize||!e.anonymize.terms||(e.termsRegexWarning=!!e.terms&&!!e.terms.match(/[-[\]{}()*+?.,\\^$|#]/g),Ve())}async function z(){let g=parseGithubUrl(e.sourceUrl),_=m();try{N();let A=await t.get(`/api/pr/${g.owner}/${g.repo}/${g.pullRequestId}`,{params:{connection:e.githubConnection}});if(!w(_))return;e.details=A.data,e.pullRequestId||(e.pullRequestId=g.repo+"-PR"+g.pullRequestId+"-"+generateRandomId(4))}catch(A){if(!w(_))return;throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(_)}}let J=Ue(new Map);function Y(){let g=new Set,_=e.details&&e.details.pullRequest;if(!_)return g;typeof _.title=="string"&&g.add(_.title),typeof _.body=="string"&&g.add(_.body),typeof _.diff=="string"&&g.add(_.diff);let A=_.comments||[];for(let P of A)typeof P.author=="string"&&g.add(P.author),typeof P.body=="string"&&g.add(P.body);return g}let M=We("pr",()=>{let g=Y(),_=Array.from(g);return _.length===0?null:{contents:_,options:ze()}},(g,_)=>{if(!Array.isArray(g?.contents)||g.contents.length!==_.contents.length||g.contents.some(U=>typeof U!="string"))throw Error("Invalid preview response");let A=_.contents,P=new Map;for(let U=0;U<A.length&&U<g.contents.length;U++)P.set(A[U],g.contents[U]);J.clear(),P.forEach((U,B)=>J.set(B,U))});e.anonymizePrContent=function(g){return g&&(J.has(g)?J.get(g):"")};async function X(){let g=parseGithubUrl(e.sourceUrl),_=m();try{N(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let A=await t.get(`/api/gist/source/${g.gistId}`);if(!w(_))return;e.details=A.data,e.gistId||(e.gistId="gist-"+g.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(A){if(!w(_))return;if(A.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,ee("sourceUrl","missing",!1);return}if(A.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,ee("sourceUrl","missing",!1);return}throw A.data&&(r("ERRORS."+A.data.error).then(P=>{e.addToast({title:"Error",date:new Date,body:P}),e.error=P},console.error),H(A.data.error)),ee("sourceUrl","missing",!1),A}finally{E(_)}}let K=Ue(new Map);function j(){let g=new Set,_=e.details&&e.details.gist;if(!_)return g;typeof _.description=="string"&&g.add(_.description),typeof _.ownerLogin=="string"&&g.add(_.ownerLogin);let A=_.files||[];for(let U of A)typeof U.filename=="string"&&g.add(U.filename),typeof U.content=="string"&&g.add(U.content);let P=_.comments||[];for(let U of P)typeof U.author=="string"&&g.add(U.author),typeof U.body=="string"&&g.add(U.body);return g}let re=We("gist",()=>{let g=j(),_=Array.from(g);return _.length===0?null:{contents:_,options:ze()}},(g,_)=>{if(!Array.isArray(g?.contents)||g.contents.length!==_.contents.length||g.contents.some(U=>typeof U!="string"))throw Error("Invalid preview response");let A=_.contents,P=new Map;for(let U=0;U<A.length&&U<g.contents.length;U++)P.set(A[U],g.contents[U]);K.clear(),P.forEach((U,B)=>K.set(B,U)),ce()});e.anonymizeGistContent=function(g){return g&&(K.has(g)?K.get(g):"")},e.previewGistFiles=[];function ce(){let g=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=g.map(_=>({filename:e.anonymizeGistContent(_.filename),content:e.anonymizeGistContent(_.content),language:_.language}))}e.watch("details.gist.files",ce,!0),e.watch("terms",ce);function k(){let g=e.conference;if(e.conference_data=null,!g)return;let _=g===S||e.isUpdate&&g===e._originalConference;g!==S&&(S=null),t.get("/api/conferences/"+g).then(A=>{e.conference===g&&(e.conference_data=A.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!_&&(e.options.expirationDate=new Date(e.conference_data.endDate),e.options.expirationMode="remove",e.options.update=e.conference_data.options.update,e.opti Line truncated
`).filter(B=>B),connection:e.githubConnection,fullName:`${A.owner}/${A.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(P.options.pageSource=e.details.pageSource),N();let U=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/status/"+e.repoId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error),["quota_exceeded","subscription_required_for_never_expiration"].includes(B.data.error)&&(B.data.error==="subscription_required_for_never_expiration"&&(e._existingNever=!1),e.hostingQuotaBlocked=!0,e.hostingReview=!0,je(()=>document.getElementById("repository-hosting")?.scrollIntoView({block:"center"}))))}).finally(()=>{_.disabled=!1})},e.anonymizeGist=g=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(q())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=g.currentTarget||g.target.closest?.("button")||g.target;_.disabled=!0;let A=parseGithubUrl(e.sourceUrl),P={gistId:e.gistId,terms:e.terms.trim().split(`
`).filter(B=>B),source:{gistId:A.gistId},options:e.options,conference:e.conference};N();let U=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/gist/"+e.gistId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error))}).finally(()=>{_.disabled=!1})},e.anonymizePullRequest=g=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(q())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=g.currentTarget||g.target.closest?.("button")||g.target;_.disabled=!0;let A=parseGithubUrl(e.sourceUrl),P={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(`
`).filter(B=>B),source:{repositoryFullName:`${A.owner}/${A.repo}`,pullRequestId:A.pullRequestId},options:e.options,conference:e.conference};N();let U=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(U,P,{headers:{"Content-Type":"application/json"}}).then(()=>{v.clear(),window.location.href="/pr/"+e.pullRequestId},B=>{B.data&&(r("ERRORS."+B.data.error).then(se=>{e.error=se},console.error),H(B.data.error))}).finally(()=>{_.disabled=!1})},e.watch("conference",()=>{k()}),e.watch("terms",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("options.image",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("options.link",()=>{e.detectedType==="repo"&&Ie(),e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()}),e.watch("details",()=>{e.detectedType==="pr"&&M(),e.detectedType==="gist"&&re()},!0)},vi=function(e,t,o,i,s,r){let a=ct();window.Prism?.hooks&&!window.Prism.redactionHook&&(window.Prism.hooks.add("complete",z=>{nl(z.element),z.element.querySelectorAll?.("mark.redaction").forEach(J=>{let Y=/^XXXX-(\d+)$/.exec(J.textContent);if(!Y)return;J.className="redact-chip",J.setAttribute("title","Redacted term "+Y[1]+" \u2014 the same term everywhere in this snapshot"),J.setAttribute("aria-label","Redacted term "+Y[1]),J.dataset.term=Y[0],J.textContent="";let M=J.ownerDocument.createElement("i");M.textContent=Y[1],J.appendChild(M)})}),window.Prism.redactionHook=!0);let p=xt();e.on("dark-mode",(z,J)=>{e.aceOption&&(J?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let f=0,y=null,b=null;e.fileLoadingSlow=!1,e.fileReceivedBytes=0;function w(){y&&(y.resolve(),y=null),b&&(a.timeout.cancel(b),b=null)}let m=!1;e.on("dispose",()=>{m=!0,f++,w(),E&&E.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,p(document,"click",z=>{e.symbolsOpen&&!z.target.closest?.(".symbols")&&(e.symbolsOpen=!1),e.moreOpen&&!z.target.closest?.(".tb-more")&&(e.moreOpen=!1),e.tocOpen&&!z.target.closest?.(".tb-toc-m")&&(e.tocOpen=!1),e.accountOpen&&!z.target.closest?.(".acct")&&(e.accountOpen=!1),e.helpOpen&&!z.target.closest?.(".vb-help")&&(e.helpOpen=!1)}),p(document,"keydown",z=>{z.key==="Escape"&&(e.symbolsOpen=!1,e.moreOpen=!1,e.tocOpen=!1,e.accountOpen=!1,e.helpOpen=!1),(z.ctrlKey||z.metaKey)&&!z.altKey&&z.key&&z.key.toLowerCase()==="f"&&e.type==="html"&&window.document.querySelector(".reading-layout")&&(z.preventDefault(),e.toggleMdFind(!0))}),p(document,"keydown",function(z){if((z.metaKey||z.ctrlKey)&&z.key==="k"){z.preventDefault();var J=document.querySelector(".tree-search-input");J&&(J.focus(),J.select())}});var E=null;e.onFileSearchChange=function(){E&&(E.resolve(),E=null);let z=e.fileSearchQuery;if(!z||z.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let J=r.defer();E=J,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(z)}`,{timeout:J.promise}).then(function(Y){if(!(m||E!==J)){E=null,e.fileSearchLoading=!1;var M={};e.files.forEach(function(U){M[(U.path||"")+"/"+U.name]=!0});for(var X=[],K={},j=0;j<Y.data.length;j++){var re=Y.data[j];if(re.path)for(var ce=re.path.split("/"),k="",N=0;N<ce.length;N++){var q=k;k=k?k+"/"+ce[N]:ce[N];var H=q+"/"+ce[N];!M[H]&&!K[H]&&(K[H]=!0,X.push({name:ce[N],path:q}))}}X.sort(function(U,B){return(U.path||"").split("/").length-(B.path||"").split("/").length}),X.length>0&&e.files.push.apply(e.files,X);for(var g=[],_=0;_<Y.data.length;_++){var A=Y.data[_],P=(A.path||"")+"/"+A.name;!M[P]&&A.size!=null&&(g.push(A),M[P]=!0)}g.length>0&&e.files.push.apply(e.files,g),e.fileSearchResults=Y.data}},function(){!m&&E===J&&(E=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let I={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},C=["license","txt"],v=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],S=["wav","mp3","ogg","wma","flac","aac","m4a"],D=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(z,J){if(e.repoId!=i.repoId)return Ie();if((i.path||"")!=e.filePath){e.filePath=i.path||"",e.paths=e.filePath.split("/").filter(Y=>Y&&Y.trim().length>0),Ve();for(let Y=0;Y<e.paths.length-1;Y++){let M=Y>0?e.paths.slice(0,Y).join("/"):"";e.files.some(K=>K.path===M)||e.getFiles(M)}}});function V(){if(e.paths[0]!="")return;let z=["readme.md","readme.txt","readme.org","readme.1st","readme"],J={};for(let M of e.files)M.name.toLowerCase().indexOf("readme")>-1&&(J[M.name.toLowerCase()]=M.name);let Y=null;for(let M of z)if(J[M]){Y=M;break}if(!Y&&Object.keys(J).length>0&&(Y=Object.keys(J)[0]),Y){let M=o.url();M[M.length-1]!="/"&&(M+="/"),o.url(M+encodePathForUrl(J[Y]))}}e.fileCounts=null;let F=0,L=new Set,G=!1;e.getFiles=function(z,J=!1){let Y=e.repoId,M=F;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURICompoLine truncated
`).forEach((J,Y)=>{for(let[M,X]of de){let K=M.exec(J);if(K&&!/^(if|for|while|switch|return|catch)$/.test(K[1])){z.push({name:K[1],kind:X,line:Y+1});break}}}),he={content:e.content,list:z.slice(0,300)},he.list},e.goToSymbol=function(z){e.symbolsOpen=!1;let J=e.codeEditor;J&&(J.scrollToLine(z-1,!0,!0,()=>{}),J.gotoLine(z,0,!0),window.history.replaceState(null,"",window.location.pathname+window.location.search+"#L"+z),window.dispatchEvent(new HashChangeEvent("hashchange")))},e.gotoLine=function(){let z=e.codeEditor;z&&(z.focus(),z.execCommand("gotoline"))},e.rootEntries=function(){return[...e.files||[]].sort((z,J)=>{let Y=z.size==null,M=J.size==null;return Y!==M?Y?-1:1:z.name.localeCompare(J.name)})},e.formatSize=function(z){if(z==null)return"";if(z<1024)return z+" B";let J=z/1024;return J<1024?J.toFixed(1)+" KB":(J/1024).toFixed(1)+" MB"},e.fileSize=function(z){if(!z)return null;let J=z.replace(/^\/+/,""),Y=(e.files||[]).find(M=>(M.path?M.path+"/":"")+M.name===J);return Y&&Y.size!=null?Y.size:null},e.revealFolder=function(z){e.sidebarHidden=!1,e.sidebarCollapsed=!1,je(()=>{let J=window.document.querySelector('.files a[data-path="/'+(window.CSS?.escape?window.CSS.escape(z):z)+'"]');J&&(J.closest("li")?.classList.contains("open")||J.click(),J.scrollIntoView({block:"nearest"}),J.focus())})};let ke=/\bXXXX-\d+\b/g;e.redactionCount=function(){return typeof e.content!="string"?0:((e.type==="html"?e.content.replace(/<[^>]*>/g," "):e.content).match(ke)||[]).length},e.renderRedacted=function(z){if(!z||z.indexOf("XXXX-")===-1||typeof window.DOMParser!="function")return z;let J=new window.DOMParser().parseFromString("<div>"+z+"</div>","text/html"),Y=J.createTreeWalker(J.body,4),M=[];for(;Y.nextNode();)ke.lastIndex=0,!Y.currentNode.parentElement?.closest("pre code")&&ke.test(Y.currentNode.nodeValue)&&M.push(Y.currentNode);for(let X of M){ke.lastIndex=0;let K=J.createDocumentFragment(),j=0,re,ce=X.nodeValue;for(;re=ke.exec(ce);){K.appendChild(J.createTextNode(ce.slice(j,re.index)));let k=J.createElement("mark");k.className="redact-chip",k.setAttribute("title","Redacted term "+re[0].slice(5)+" \u2014 the same term everywhere in this snapshot");let N=re[0].slice(5);k.textContent="";let q=J.createElement("i");q.textContent=N,k.appendChild(q),k.dataset.term=re[0],k.setAttribute("aria-label","Redacted term "+N);let H=/^[.,;:!?)\]]+/.exec(ce.slice(re.index+re[0].length));if(H){let g=J.createElement("span");g.className="redact-glue",g.appendChild(k),g.appendChild(J.createTextNode(H[0])),K.appendChild(g),j=re.index+re[0].length+H[0].length}else K.appendChild(k),j=re.index+re[0].length}K.appendChild(J.createTextNode(ce.slice(j))),X.parentNode.replaceChild(K,X)}return J.body.firstChild.innerHTML};let be=z=>z.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,60)||"section";e.renderReadme=function(z){let J=e.renderRedacted(z);if(!J||typeof window.DOMParser!="function")return J;let Y=new window.DOMParser().parseFromString("<div>"+J+"</div>","text/html"),M={};return Y.querySelectorAll("h1, h2, h3").forEach(X=>{let K=X.id||be(X.textContent);M[K]?K+="-"+ ++M[K]:M[K]=1,X.id=K}),Y.body.firstChild.innerHTML};let ye={content:null,list:[]};e.readmeToc=function(){if(e.type!=="html"||typeof e.content!="string")return[];if(ye.content===e.content)return ye.list;let J=[...new window.DOMParser().parseFromString("<div>"+e.renderReadme(e.sanitize?e.sanitize(e.content):e.content)+"</div>","text/html").querySelectorAll("h2, h3")].map(Y=>({id:Y.id,text:Y.textContent.trim(),level:Y.tagName==="H3"?3:2})).slice(0,40);return ye={content:e.content,list:J},J},e.activeHeading=null,p(window,"scroll",()=>{let z=e.readmeToc?e.readmeToc():[];if(!z.length)return;let J=150,Y="",M="";for(let X of z){let K=window.document.getElementById(X.id);if(!K)continue;let j=K.getBoundingClientRect().top;j<J?Y=X.id:!M&&j<window.innerHeight-80&&(M=X.id)}M&&(Y=M),e.activeHeading!==Y&&(e.activeHeading=Y)},{capture:!0,passive:!0}),e.scrollToHeading=function(z){if(!z){(window.document.querySelector(".explorer-content, .file-card-body, .main-pane")||window).scrollTo({top:0,behavior:"smooth"}),e.activeHeading="";return}let J=window.document.getElementById(z);J&&J.scrollIntoView({behavior:"smooth",block:"start"}),e.activeHeading=z},e.redactParts=function(z){let J=[],Y=0,M,X=/\bXXXX-(\d+)\b/g;for(z=String(z||"");M=X.exec(z);)M.index>Y&&J.push({t:z.slice(Y,M.index)}),J.push({n:M[1]}),Y=M.index+M[0].length;return Y<z.length&&J.push({t:z.slice(Y)}),J},e.pathCopied=!1,e.copyPath=async function(){window.navigator.clipboard?.writeText&&(await window.navigator.clipboard.writeText(e.filePath||""),e.pathCopied=!0,setTimeout(()=>{e.pathCopied=!1},1600))},e.contentCopied=!1,e.copyContent=async function(){if(typeof e.content!="string"||!window.navigator.clipboard?.writeText)return;let z=e.content;if(e.type==="html"&&e.url)try{z=await(await window.fetch(e.url,{credentials:"same-origin"})).text()}catch{return}await window.navigator.clipboard.writeText(z),e.contentCopied=!0,s Line truncated
`+C.join(`
`)],{type:"text/csv"}),S=document.createElement("a");S.href=URL.createObjectURL(v),S.download=i.username+"-repositories.csv",S.click()},e.showStatusMessage=m=>{let E=m.statusMessage||"(no message)";window.prompt(`Status message for ${m.repoId} (${m.status}):`,E)},e.fetchGithubInfo=m=>{let E=window.open("","_blank");E&&E.document.write("<pre>Loading GitHub info for "+m.repoId+"...</pre>"),t.get("/api/admin/repos/"+m.repoId+"/github").then(I=>{E&&(E.document.open(),E.document.write('<pre style="font:13px monospace;padding:16px;white-space:pre-wrap">'+JSON.stringify(I.data,null,2).replace(/[<>]/g,C=>C==="<"?"&lt;":"&gt;")+"</pre>"),E.document.close())},I=>{let C=I&&I.data?JSON.stringify(I.data,null,2):String(I);E&&(E.document.body.innerHTML='<pre style="color:#B42318;padding:16px">'+C+"</pre>")})};function f(m){t.get("/api/admin/users/"+m+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function y(m){t.get("/api/admin/users/"+m,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}y(i.username),f(i.username),e.banUser=()=>{confirm(`Ban user ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/ban`).then(()=>y(i.username),m=>console.error(m))},e.activateUser=()=>{t.post(`/api/admin/users/${i.username}/activate`).then(()=>y(i.username),m=>console.error(m))},e.promoteUser=()=>{confirm(`Promote ${i.username} to admin?`)&&t.post(`/api/admin/users/${i.username}/promote`).then(()=>y(i.username),m=>console.error(m))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/demote`).then(()=>y(i.username),m=>console.error(m))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function b(){t.get("/api/admin/tokens").then(m=>{e.tokens=m.data||[]},m=>{m.status!==401&&m.status!==403&&console.error(m)})}b(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(m=>{e.tokenForm.plaintext=m.data.token,e.tokenForm.name="",b()},m=>console.error(m))},e.revokeToken=m=>{confirm(`Revoke token "${m.name}"?`)&&t.delete("/api/admin/tokens/"+m.id).then(()=>b(),E=>console.error(E))},e.removeCache=m=>{confirm("Remove cached files for "+m.repoId+"?")&&t.delete("/api/admin/repos/"+m.repoId).then(()=>f(i.username),E=>console.error(E))},e.removeRepository=m=>{confirm("Remove repository "+m.repoId+"?")&&t.delete("/api/repo/"+m.repoId+"/").then(()=>f(i.username),E=>console.error(E))},e.updateRepository=m=>{let E=Ue({title:`Refreshing ${m.repoId}...`,date:new Date,body:`The repository ${m.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${m.repoId}/refresh`).then(I=>{I.data.status=="ready"?E.title=`${m.repoId} is refreshed.`:E.title=`Refreshing of ${m.repoId}.`},I=>{E.title=`Error during the refresh of ${m.repoId}.`,E.body=I.body})},e.getGitHubRepositories=m=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let w=null;e.watch("query",()=>{s.timeout.cancel(w),w=s.timeout(()=>{f(i.username)},500)},!0)},kl=function(e,t,o){let i=ct(),s=xt();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 r=I=>{if(I.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){I.preventDefault();let C=document.querySelector('.admin-filter-toolbar input[type="search"]');C&&C.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=I=>{I==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[I]="",e.query.page=1},e.chips=[];let a=()=>{let I=[];(e.query.dateFrom||e.query.dateTo)&&I.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=I};e.statusCountFor=I=>{let C=(e.statusCounts||[]).find(v=>v._id===I);return C?C.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=I=>{e.query.sort===I?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=I,e.query.direction="desc"),e.query.page=1},e.sortIcon=I=>e.query.sort===I?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let p="admin.conferences.filterPrefs",f={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!0,expired:!0,removed:!1,error:!0,preparing:!0},y=loadFilterPrefs(p)||{};e.query=Object.assign({},f,y,{page:1,search:""});let b=o.search();b.search&&(e.query.search=b.search);let w="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(w)||"[]"),e.savePreset=()=>{let I=window.prompt("Preset name:");if(!I)return;let C=Object.assign({},e.query);delete C.page,e.presets=(e.presets||[]).filter(v=>v.name!==I),e.presets.push({name:I,query:C}),localStorage.setItem(w,JSON.stringify(e.presets))},e.applyPreset=I=>{Object.assign(e.query,I.query,{page:1})},e.deletePreset=I=>{e.presets=(e.presets||[]).filter(C=>C.name!==I.name),localStorage.setItem(w,JS Line truncated
`)],{type:"text/csv"}),S=document.createElement("a");S.href=URL.createObjectURL(v),S.download=i.username+"-repositories.csv",S.click()},e.showStatusMessage=m=>{let E=m.statusMessage||"(no message)";window.prompt(`Status message for ${m.repoId} (${m.status}):`,E)},e.fetchGithubInfo=m=>{let E=window.open("","_blank");E&&E.document.write("<pre>Loading GitHub info for "+m.repoId+"...</pre>"),t.get("/api/admin/repos/"+m.repoId+"/github").then(I=>{E&&(E.document.open(),E.document.write('<pre style="font:13px monospace;padding:16px;white-space:pre-wrap">'+JSON.stringify(I.data,null,2).replace(/[<>]/g,C=>C==="<"?"&lt;":"&gt;")+"</pre>"),E.document.close())},I=>{let C=I&&I.data?JSON.stringify(I.data,null,2):String(I);E&&(E.document.body.innerHTML='<pre style="color:#B42318;padding:16px">'+C+"</pre>")})};function f(m){t.get("/api/admin/users/"+m+"/repos",{}).then(E=>{e.repositories=E.data},E=>{console.error(E)})}function y(m){t.get("/api/admin/users/"+m,{}).then(E=>{e.userInfo=E.data},E=>{console.error(E)})}y(i.username),f(i.username),e.banUser=()=>{confirm(`Ban user ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/ban`).then(()=>y(i.username),m=>console.error(m))},e.activateUser=()=>{t.post(`/api/admin/users/${i.username}/activate`).then(()=>y(i.username),m=>console.error(m))},e.promoteUser=()=>{confirm(`Promote ${i.username} to admin?`)&&t.post(`/api/admin/users/${i.username}/promote`).then(()=>y(i.username),m=>console.error(m))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/demote`).then(()=>y(i.username),m=>console.error(m))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function b(){t.get("/api/admin/tokens").then(m=>{e.tokens=m.data||[]},m=>{m.status!==401&&m.status!==403&&console.error(m)})}b(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(m=>{e.tokenForm.plaintext=m.data.token,e.tokenForm.name="",b()},m=>console.error(m))},e.revokeToken=m=>{confirm(`Revoke token "${m.name}"?`)&&t.delete("/api/admin/tokens/"+m.id).then(()=>b(),E=>console.error(E))},e.removeCache=m=>{confirm("Remove cached files for "+m.repoId+"?")&&t.delete("/api/admin/repos/"+m.repoId).then(()=>f(i.username),E=>console.error(E))},e.removeRepository=m=>{confirm("Remove repository "+m.repoId+"?")&&t.delete("/api/repo/"+m.repoId+"/").then(()=>f(i.username),E=>console.error(E))},e.updateRepository=m=>{let E=Ue({title:`Refreshing ${m.repoId}...`,date:new Date,body:`The repository ${m.repoId} is going to be refreshed.`});e.toasts.push(E),t.post(`/api/repo/${m.repoId}/refresh`).then(I=>{I.data.status=="ready"?E.title=`${m.repoId} is refreshed.`:E.title=`Refreshing of ${m.repoId}.`},I=>{E.title=`Error during the refresh of ${m.repoId}.`,E.body=I.body})},e.getGitHubRepositories=m=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(E=>{e.userInfo.repositories=E.data})};let w=null;e.watch("query",()=>{s.timeout.cancel(w),w=s.timeout(()=>{f(i.username)},500)},!0)},kl=function(e,t,o){let i=ct(),s=xt();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 r=I=>{if(I.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){I.preventDefault();let C=document.querySelector('.admin-filter-toolbar input[type="search"]');C&&C.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=I=>{I==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[I]="",e.query.page=1},e.chips=[];let a=()=>{let I=[];(e.query.dateFrom||e.query.dateTo)&&I.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=I};e.statusCountFor=I=>{let C=(e.statusCounts||[]).find(v=>v._id===I);return C?C.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=I=>{e.query.sort===I?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=I,e.query.direction="desc"),e.query.page=1},e.sortIcon=I=>e.query.sort===I?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let p="admin.conferences.filterPrefs",f={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!0,expired:!0,removed:!1,error:!0,preparing:!0},y=loadFilterPrefs(p)||{};e.query=Object.assign({},f,y,{page:1,search:""});let b=o.search();b.search&&(e.query.search=b.search);let w="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(w)||"[]"),e.savePreset=()=>{let I=window.prompt("Preset name:");if(!I)return;let C=Object.assign({},e.query);delete C.page,e.presets=(e.presets||[]).filter(v=>v.name!==I),e.presets.push({name:I,query:C}),localStorage.setItem(w,JSON.stringify(e.presets))},e.applyPreset=I=>{Object.assign(e.query,I.query,{page:1})},e.deletePreset=I=>{e.presets=(e.presets||[]).filter(C=>C.name!==I.name),localStorage.setItem(w,JS Line truncated
`).map((ke,be)=>be===0?ke:he+ke).join(`
`)}else typeof R=="number"||typeof R=="boolean"?de=String(R):de=JSON.stringify(R);ie.push(`${ve}${de}${ee}`)}),ie.push("}"),ie.join(`
`)}function y(S){let D=[],V="",F=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,L=0,G;for(;G=F.exec(S);)V+=S.slice(L,G.index),L=F.lastIndex,D.push({key:G[1],op:G[2]||"=",val:G[3]});return V+=S.slice(L),{filters:D,free:V.trim().toLowerCase()}}function b(S,D){for(let V of D.filters){let F=(G,ie,te)=>{let R=parseFloat(G),Y=parseFloat(ie);return te==="="?String(G)===String(ie):te==="!="?String(G)!==String(ie):te===">="?R>=Y:te==="<="?R<=Y:te===">"?R>Y:te==="<"?R<Y:!0},L;if(V.key==="code")L=S.displayMessage;else if(V.key==="module")L=S.module;else if(V.key==="status")L=S._status;else if(V.key==="url")L=S._url;else if(V.key==="repo")L=S._repoId;else if(V.key==="level")L=S.level;else continue;if(L==null||!F(L,V.val,V.op))return!1}return!(D.free&&((S.displayMessage||"")+" "+(S.module||"")+" "+(S._url||"")+" "+JSON.stringify(S.raw||[])).toLowerCase().indexOf(D.free)===-1)}function w(){let S=y(e.query.search||"");e.parsedFilterCount=S.filters.length;let D=e.query.bucket,V=e.entries.filter(te=>D&&te._bucket!==D?!1:b(te,S)),F=e.query.group;if(F){let te=ne=>F==="module"?ne.module:ne.displayMessage||ne.message||"_",R=new Map;for(let ne of V){let ve=te(ne);if(R.has(ve)){let ee=R.get(ve);ee.count++,ee._related.push(ne),new Date(ne.ts)>new Date(ee.ts)&&(ee.ts=ne.ts,ee._url=ne._url,ee._status=ne._status),new Date(ne.ts)<new Date(ee._firstSeen)&&(ee._firstSeen=ne.ts)}else{let ee=Object.assign({},ne);ee._key=`${F}:${ve}`,ee._related=[ne],ee._firstSeen=ne.ts,ee._lastHourCount=0,ee.count=1,R.set(ve,ee)}}let Y=Date.now()-3600*1e3;for(let ne of R.values())ne._lastHourCount=ne._related.filter(ve=>new Date(ve.ts).getTime()>=Y).length;V=Array.from(R.values())}else V=V.map((te,R)=>(te._key="row:"+R+":"+te.ts,te._related=[te],te._firstSeen=te.ts,te._lastHourCount=0,te.count=1,te));let L=te=>({error:0,warn:1,info:2})[te._bucket]??1;e.query.sort==="count"?V.sort((te,R)=>L(te)-L(R)||R.count-te.count||new Date(R.ts)-new Date(te.ts)):V.sort((te,R)=>L(te)-L(R)||new Date(R.ts)-new Date(te.ts)),e.visible=V;let G=!!(e.query.bucket||(e.query.search||"").trim()),ie=!G&&(e.stats?.severity?.error||0)>0&&!V.some(te=>te._bucket==="error")&&e.entries.length<1500;(G&&!V.length||ie)&&e.canLoadMore?.()&&!e._autoLoading&&e.entries.length<2500&&(e._autoLoading=!0,m(!0))}function m(S){let D=S?e.entries.length:0,V=S?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:D,limit:V}}).then(F=>{let L=(F.data.entries||[]).map(p);e.entries=S?e.entries.concat(L):L,e.available=!!F.data.available,e.cap=F.data.max||e.cap,e.total=F.data.total||e.entries.length,e._autoLoading=!1,w()},F=>{e._autoLoading=!1,console.error(F)})}e.loadMore=()=>m(!0),e.canLoadMore=()=>e.entries.length<e.total;function E(){t.get("/api/admin/errors/stats").then(S=>{let D=S.data||{},V=D.prev24h?Math.round((D.last24h-D.prev24h)/D.prev24h*100):0;e.stats={last24h:D.last24h||0,prev24h:D.prev24h||0,delta:V,severity:D.severity||{error:0,warn:0,info:0},unique:D.unique||{error:0,warn:0,info:0},buckets:D.buckets||[],dropped:D.dropped||0},w()},S=>console.error(S))}function I(){m(),E()}e.barPx=(S,D)=>{let V=e.stats.buckets||[],F=0,L=0;for(let R of V)F=Math.max(F,(R.error||0)+(R.warn||0)),L=Math.max(L,R.info||0);let G=S[D]||0;if(!G)return 0;if(D==="info")return L?Math.max(2,Math.round(G/L*(F?16:60))):0;let ie=(S.error||0)+(S.warn||0),te=Math.round(ie/F*44);return Math.max(4,Math.round(G/ie*te))},e.bucketTitle=S=>`${new Date(S.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${S.error||0} err \xB7 ${S.warn||0} warn \xB7 ${S.info||0} info`,e.toggle=S=>{e.expanded[S._key]=!e.expanded[S._key]},e.setBucket=S=>{e.query.bucket=S},e.refreshNow=I,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(I,S=>console.error(S))},e.exportCsv=()=>{let S=["ts","level","module","displayMessage","_status","_url","_repoId"],D=[S.join(",")];for(let G of e.visible)D.push(S.map(ie=>{let te=G[ie]==null?"":String(G[ie]);return/[",\n]/.test(te)?`"${te.replace(/"/g,'""')}"`:te}).join(","));let V=new Blob([D.join(`
`)],{type:"text/csv;charset=utf-8"}),F=URL.createObjectURL(V),L=document.createElement("a");L.href=F,L.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(L),L.click(),document.body.removeChild(L),URL.revokeObjectURL(F)};function C(S){e.copyHint=`${S} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=S=>{navigator.clipboard.writeText(S._detailJson).then(()=>C("JSON"))},e.copyCurl=S=>{if(!S._url)return;let V=`curl -X ${S._method||"GET"} '${window.location.origin}${S._url}'`;navigator.clipboard.writeText(V).then(()=>C("curl"))},I();let v=i(()=>{e.query.autoRefresh&&I()},15e3);e.on("dispose",()=>i.cancel(v)),e.watch("query.search",w),e.watch("query.bucket",w),e.watch("query.sort",w),e.watch("query.group",w)},Sl=function(e,t,o,i){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null){o.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.cacheReport=null,e.cacheError=null,e.cacheMinutes=60,e.cacheTraffic="all";var s=!1;e.loadCache=function(){if(!s){s=!0;var v=e.cacheMinutes;t.get("/api/admin/cache",{params:{minutes:v}}).then(function(S){v===e.cacheMinutes&&(e.cacheReport=S.data,e.cacheError=S.data.available?null:S.data.reason||"Cache monitoring is unavailable.")},function(){e.cacheError="Could not refresh cache monitoring. Displayed values may be stale."}).finally(function(){s=!1,v!==e.cacheMinutes&&e.loadCache()})}},e.cacheRows=function(){return(e.cacheReport?.rows||[]).filter(function(v){return e.cacheTraffic==="all"||v.traffic===e.cacheTraffic})},e.cacheRate=function(v,S){var D=e.cacheRows(),V=function(G){return D.filter(function(ie){return ie.name===G}).reduce(function(ie,te){return ie+te[S]},0)},F=V(v+"_hit"),L=V(v+"_miss");return F+L?(100*F/(F+L)).toFixed(1)+"%":"No samples"},e.cacheEventName=function(v){return v.replaceAll("_"," ")},e.cacheP95=function(v){var S=0,D=e.cacheReport?.latencyBucketsMs||[];if(!v.count)return"No samples";if(!v.ms)return"Not timed";for(var V=0;V<=D.length;V++)if(S+=v["b"+V]||0,S>=Math.ceil(v.count*.95))return V<D.length?"\u2264 "+D[V]+" ms":"> 10 s";return"No samples"},e.performanceError=null,e.formatMs=function(v){return v==null?"":v<1e3?v+" ms":+(v/1e3).toFixed(1)+" s"},e.latencyBound=function(v,S){return v.count?v[S]==null?"> 60 s":"\u2264 "+e.formatMs(v[S]):"No samples"},e.firstByteBound=function(v){return e.latencyBound({count:v.firstByteCount,p95UpperMs:v.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(v){return Math.max(0,Math.round((Date.now()-v.sampledAt)/1e3))},e.peakRss=function(v){return(e.performance.runtimeSeries||[]).filter(function(S){return S.instance===v.instance}).reduce(function(S,D){return Math.max(S,D.rss)},v.memory.rss)},e.performanceWarning=function(v){return e.sampleAge(v)>45||v.droppedBatches||v.droppedMetrics||v.sockets?.closeWait>0||v.eventLoop?.p95Ms>100||v.memoryLimitBytes&&v.memory.rss>v.memoryLimitBytes*.8};var r=!1;e.loadPerformance=function(){var v=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==v&&(e.performance=null),!r&&(r=!0,t.get("/api/admin/performance",{params:{minutes:v}}).then(function(S){v===e.performanceMinutes&&(e.performance=S.data,e.performanceError=S.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){v===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){r=!1,v!==e.performanceMinutes&&e.loadPerformance()}))};function a(v){if(v==null)return"\u2014";for(var S=["B","KB","MB","GB","TB"],D=0,V=v;V>=1024&&D<S.length-1;)V/=1024,D++;return V.toFixed(D>0?1:0)+" "+S[D]}e.humanBytes=a;function p(v){if(!v)return"\u2014";var S=Math.floor(v/86400),D=Math.floor(v%86400/3600),V=Math.floor(v%3600/60);return S>0?S+"d "+(D<10?"0":"")+D+"h":D>0?D+"h "+(V<10?"0":"")+V+"m":V+"m"}e.humanDuration=p;function f(v){return v==null?"\u2014":v>=1e6?(v/1e6).toFixed(1)+"M":v>=1e3?(v/1e3).toFixed(1)+"K":String(v)}e.humanNum=f,e.queueTotal=function(v){return v?(v.waiting||0)+(v.active||0)+(v.delayed||0)+(v.failed||0):0},e.statusCount=function(v){if(!e.data||!e.data.repos)return 0;for(var S=e.data.repos.statusBreakdown||[],D=0;D<S.length;D++)if(S[D]._id===v)return S[D].count;return 0},e.barPct=function(v){var S=e.data&&e.data.repos?e.data.repos.total:0;if(!S)return 0;var D=[v];v==="expired"&&D.push("expiring"),v==="removed"&&D.push("removing"),v==="preparing"&&D.push("download");var V=0;return D.forEach(function(F){V+=e.statusCount(F)}),Math.max(.4,V/S*100)},e.errPct=function(v){if(!e.data||!e.data.errors)return 0;var S=Math.max(e.data.errors.severity.error,e.data.errors.severity.warn,e.data.errors.severity.info,1);return e.data.errors.severity[v]/S*100};function y(v){var S=v||[];return S.map(function(D,V){var F=S[V-1]||{},L=Object.assign({},D);return L.dailyRepositories=V?Math.max(0,(D.nbRepositories||0)-(F.nbRepositories||0)):0,L.dailyUse Line truncated
`)}function y(S){let D=[],V="",F=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,L=0,G;for(;G=F.exec(S);)V+=S.slice(L,G.index),L=F.lastIndex,D.push({key:G[1],op:G[2]||"=",val:G[3]});return V+=S.slice(L),{filters:D,free:V.trim().toLowerCase()}}function b(S,D){for(let V of D.filters){let F=(G,ie,te)=>{let R=parseFloat(G),Q=parseFloat(ie);return te==="="?String(G)===String(ie):te==="!="?String(G)!==String(ie):te===">="?R>=Q:te==="<="?R<=Q:te===">"?R>Q:te==="<"?R<Q:!0},L;if(V.key==="code")L=S.displayMessage;else if(V.key==="module")L=S.module;else if(V.key==="status")L=S._status;else if(V.key==="url")L=S._url;else if(V.key==="repo")L=S._repoId;else if(V.key==="level")L=S.level;else continue;if(L==null||!F(L,V.val,V.op))return!1}return!(D.free&&((S.displayMessage||"")+" "+(S.module||"")+" "+(S._url||"")+" "+JSON.stringify(S.raw||[])).toLowerCase().indexOf(D.free)===-1)}function w(){let S=y(e.query.search||"");e.parsedFilterCount=S.filters.length;let D=e.query.bucket,V=e.entries.filter(te=>D&&te._bucket!==D?!1:b(te,S)),F=e.query.group;if(F){let te=ne=>F==="module"?ne.module:ne.displayMessage||ne.message||"_",R=new Map;for(let ne of V){let ve=te(ne);if(R.has(ve)){let ee=R.get(ve);ee.count++,ee._related.push(ne),new Date(ne.ts)>new Date(ee.ts)&&(ee.ts=ne.ts,ee._url=ne._url,ee._status=ne._status),new Date(ne.ts)<new Date(ee._firstSeen)&&(ee._firstSeen=ne.ts)}else{let ee=Object.assign({},ne);ee._key=`${F}:${ve}`,ee._related=[ne],ee._firstSeen=ne.ts,ee._lastHourCount=0,ee.count=1,R.set(ve,ee)}}let Q=Date.now()-3600*1e3;for(let ne of R.values())ne._lastHourCount=ne._related.filter(ve=>new Date(ve.ts).getTime()>=Q).length;V=Array.from(R.values())}else V=V.map((te,R)=>(te._key="row:"+R+":"+te.ts,te._related=[te],te._firstSeen=te.ts,te._lastHourCount=0,te.count=1,te));let L=te=>({error:0,warn:1,info:2})[te._bucket]??1;e.query.sort==="count"?V.sort((te,R)=>L(te)-L(R)||R.count-te.count||new Date(R.ts)-new Date(te.ts)):V.sort((te,R)=>L(te)-L(R)||new Date(R.ts)-new Date(te.ts)),e.visible=V;let G=!!(e.query.bucket||(e.query.search||"").trim()),ie=!G&&(e.stats?.severity?.error||0)>0&&!V.some(te=>te._bucket==="error")&&e.entries.length<1500;(G&&!V.length||ie)&&e.canLoadMore?.()&&!e._autoLoading&&e.entries.length<2500&&(e._autoLoading=!0,m(!0))}function m(S){let D=S?e.entries.length:0,V=S?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:D,limit:V}}).then(F=>{let L=(F.data.entries||[]).map(p);e.entries=S?e.entries.concat(L):L,e.available=!!F.data.available,e.cap=F.data.max||e.cap,e.total=F.data.total||e.entries.length,e._autoLoading=!1,w()},F=>{e._autoLoading=!1,console.error(F)})}e.loadMore=()=>m(!0),e.canLoadMore=()=>e.entries.length<e.total;function E(){t.get("/api/admin/errors/stats").then(S=>{let D=S.data||{},V=D.prev24h?Math.round((D.last24h-D.prev24h)/D.prev24h*100):0;e.stats={last24h:D.last24h||0,prev24h:D.prev24h||0,delta:V,severity:D.severity||{error:0,warn:0,info:0},unique:D.unique||{error:0,warn:0,info:0},buckets:D.buckets||[],dropped:D.dropped||0},w()},S=>console.error(S))}function I(){m(),E()}e.barPx=(S,D)=>{let V=e.stats.buckets||[],F=0,L=0;for(let R of V)F=Math.max(F,(R.error||0)+(R.warn||0)),L=Math.max(L,R.info||0);let G=S[D]||0;if(!G)return 0;if(D==="info")return L?Math.max(2,Math.round(G/L*(F?16:60))):0;let ie=(S.error||0)+(S.warn||0),te=Math.round(ie/F*44);return Math.max(4,Math.round(G/ie*te))},e.bucketTitle=S=>`${new Date(S.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${S.error||0} err \xB7 ${S.warn||0} warn \xB7 ${S.info||0} info`,e.toggle=S=>{e.expanded[S._key]=!e.expanded[S._key]},e.setBucket=S=>{e.query.bucket=S},e.refreshNow=I,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(I,S=>console.error(S))},e.exportCsv=()=>{let S=["ts","level","module","displayMessage","_status","_url","_repoId"],D=[S.join(",")];for(let G of e.visible)D.push(S.map(ie=>{let te=G[ie]==null?"":String(G[ie]);return/[",\n]/.test(te)?`"${te.replace(/"/g,'""')}"`:te}).join(","));let V=new Blob([D.join(`
`)],{type:"text/csv;charset=utf-8"}),F=URL.createObjectURL(V),L=document.createElement("a");L.href=F,L.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(L),L.click(),document.body.removeChild(L),URL.revokeObjectURL(F)};function C(S){e.copyHint=`${S} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=S=>{navigator.clipboard.writeText(S._detailJson).then(()=>C("JSON"))},e.copyCurl=S=>{if(!S._url)return;let V=`curl -X ${S._method||"GET"} '${window.location.origin}${S._url}'`;navigator.clipboard.writeText(V).then(()=>C("curl"))},I();let v=i(()=>{e.query.autoRefresh&&I()},15e3);e.on("dispose",()=>i.cancel(v)),e.watch("query.search",w),e.watch("query.bucket",w),e.watch("query.sort",w),e.watch("query.group",w)},Sl=function(e,t,o,i){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null){o.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.cacheReport=null,e.cacheError=null,e.cacheMinutes=60,e.cacheTraffic="all";var s=!1;e.loadCache=function(){if(!s){s=!0;var v=e.cacheMinutes;t.get("/api/admin/cache",{params:{minutes:v}}).then(function(S){v===e.cacheMinutes&&(e.cacheReport=S.data,e.cacheError=S.data.available?null:S.data.reason||"Cache monitoring is unavailable.")},function(){e.cacheError="Could not refresh cache monitoring. Displayed values may be stale."}).finally(function(){s=!1,v!==e.cacheMinutes&&e.loadCache()})}},e.cacheRows=function(){return(e.cacheReport?.rows||[]).filter(function(v){return e.cacheTraffic==="all"||v.traffic===e.cacheTraffic})},e.cacheRate=function(v,S){var D=e.cacheRows(),V=function(G){return D.filter(function(ie){return ie.name===G}).reduce(function(ie,te){return ie+te[S]},0)},F=V(v+"_hit"),L=V(v+"_miss");return F+L?(100*F/(F+L)).toFixed(1)+"%":"No samples"},e.cacheEventName=function(v){return v.replaceAll("_"," ")},e.cacheP95=function(v){var S=0,D=e.cacheReport?.latencyBucketsMs||[];if(!v.count)return"No samples";if(!v.ms)return"Not timed";for(var V=0;V<=D.length;V++)if(S+=v["b"+V]||0,S>=Math.ceil(v.count*.95))return V<D.length?"\u2264 "+D[V]+" ms":"> 10 s";return"No samples"},e.performanceError=null,e.formatMs=function(v){return v==null?"":v<1e3?v+" ms":+(v/1e3).toFixed(1)+" s"},e.latencyBound=function(v,S){return v.count?v[S]==null?"> 60 s":"\u2264 "+e.formatMs(v[S]):"No samples"},e.firstByteBound=function(v){return e.latencyBound({count:v.firstByteCount,p95UpperMs:v.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(v){return Math.max(0,Math.round((Date.now()-v.sampledAt)/1e3))},e.peakRss=function(v){return(e.performance.runtimeSeries||[]).filter(function(S){return S.instance===v.instance}).reduce(function(S,D){return Math.max(S,D.rss)},v.memory.rss)},e.performanceWarning=function(v){return e.sampleAge(v)>45||v.droppedBatches||v.droppedMetrics||v.sockets?.closeWait>0||v.eventLoop?.p95Ms>100||v.memoryLimitBytes&&v.memory.rss>v.memoryLimitBytes*.8};var r=!1;e.loadPerformance=function(){var v=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==v&&(e.performance=null),!r&&(r=!0,t.get("/api/admin/performance",{params:{minutes:v}}).then(function(S){v===e.performanceMinutes&&(e.performance=S.data,e.performanceError=S.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){v===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){r=!1,v!==e.performanceMinutes&&e.loadPerformance()}))};function a(v){if(v==null)return"\u2014";for(var S=["B","KB","MB","GB","TB"],D=0,V=v;V>=1024&&D<S.length-1;)V/=1024,D++;return V.toFixed(D>0?1:0)+" "+S[D]}e.humanBytes=a;function p(v){if(!v)return"\u2014";var S=Math.floor(v/86400),D=Math.floor(v%86400/3600),V=Math.floor(v%3600/60);return S>0?S+"d "+(D<10?"0":"")+D+"h":D>0?D+"h "+(V<10?"0":"")+V+"m":V+"m"}e.humanDuration=p;function f(v){return v==null?"\u2014":v>=1e6?(v/1e6).toFixed(1)+"M":v>=1e3?(v/1e3).toFixed(1)+"K":String(v)}e.humanNum=f,e.queueTotal=function(v){return v?(v.waiting||0)+(v.active||0)+(v.delayed||0)+(v.failed||0):0},e.statusCount=function(v){if(!e.data||!e.data.repos)return 0;for(var S=e.data.repos.statusBreakdown||[],D=0;D<S.length;D++)if(S[D]._id===v)return S[D].count;return 0},e.barPct=function(v){var S=e.data&&e.data.repos?e.data.repos.total:0;if(!S)return 0;var D=[v];v==="expired"&&D.push("expiring"),v==="removed"&&D.push("removing"),v==="preparing"&&D.push("download");var V=0;return D.forEach(function(F){V+=e.statusCount(F)}),Math.max(.4,V/S*100)},e.errPct=function(v){if(!e.data||!e.data.errors)return 0;var S=Math.max(e.data.errors.severity.error,e.data.errors.severity.warn,e.data.errors.severity.info,1);return e.data.errors.severity[v]/S*100};function y(v){var S=v||[];return S.map(function(D,V){var F=S[V-1]||{},L=Object.assign({},D);return L.dailyRepositories=V?Math.max(0,(D.nbRepositories||0)-(F.nbRepositories||0)):0,L.dailyUse Line truncated
MIT CSAIL
jane.smith@example.org`},null,2),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),t[86]||(t[86]=n("small",{class:"form-text text-muted"},"One term per line.",-1)),n("details",eN,[t[83]||(t[83]=n("summary",null,"Regex & replacement syntax",-1)),t[84]||(t[84]=h()),n("small",tN,[t[77]||(t[77]=h("Regex is supported. Replaced by ",-1)),n("code",null,u(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[78]||(t[78]=h(", or use ",-1)),t[79]||(t[79]=n("code",null,"term=>replacement",-1)),t[80]||(t[80]=h(" to pick your own (e.g. ",-1)),t[81]||(t[81]=n("code",null,"Anonymous=>ABC",-1)),t[82]||(t[82]=h(").",-1))])]),_(n("div",nN,"Regex characters detected. Escape them if unintentional.",512),[[X,e.termsRegexWarning]]),_(n("div",oN,"Terms are in an invalid format.",512),[[X,e.anonymize?.terms?.errors?.format]])])],512),[[X,e.detectedType]]),_(n("section",sN,[t[107]||(t[107]=n("h2",{class:"paper-section-eyebrow"},"Display",-1)),_(n("div",null,[n("div",iN,[_(n("input",rN,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[88]||(t[88]=n("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),n("div",aN,[_(n("input",lN,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[89]||(t[89]=n("label",{class:"form-check-label",for:"image"},"Display images",-1))]),n("div",dN,[_(n("input",uN,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[90]||(t[90]=n("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1))]),n("div",cN,[_(n("input",pN,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[91]||(t[91]=n("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),n("div",fN,[_(n("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,mN),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[92]||(t[92]=n("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?c("v-if",!0):(l(),d("small",hN,u(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",vN,u(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):c("v-if",!0)])],512),[[X,e.detectedType==="repo"]]),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",gN,[...t[93]||(t[93]=[h("Images and PDFs are served unchanged. Review their contents and metadata before sharing. ",-1),n("a",{href:"/faq#formats"},"Supported formats",-1)])])):c("v-if",!0),_(n("div",null,[n("div",yN,[_(n("input",bN,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[94]||(t[94]=n("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),n("div",wN,[_(n("input",kN,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[95]||(t[95]=n("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),n("div",CN,[_(n("input",EN,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[96]||(t[96]=n("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),n("div",SN,[_(n("input",NN,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[97]||(t[97]=n("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),n("div",RN,[_(n("input",DN,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[98]||(t[98]=n("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),n("div",_N,[_(n("input",TN,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[99]||(t[99]=n("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[X,e.detectedType==="gist"]]),_(n("div",null,[n("div",AN,[_(n("input",ON,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[100]||(t[100]=n("label",{class:"form-check-label",for:"title"},"PR title",-1))]),n("div",PN,[_(n("input",IN,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[101]||(t[101]=n("label",{class:"form-check-label",for:"body"},"PR body",-1))]),n("div",MN,[_(n("input",VN,null,512),[[s,{state:e.viewState,set:a=>{e.options.diff=a},value:e.op Line truncated
anonymous_github`)])])])])]),c(" Limitations "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-warning"})]),h("Limitations ")]),n("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),n("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[n("div",{class:"panel-body p-3"},[n("ul",null,[n("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),n("li",null," Files larger than 8 MB are not supported. "),n("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),n("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),c(" Privacy & Security "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-shield"})]),h("Privacy & Security ")]),n("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),n("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[n("div",{class:"panel-body p-3"},[n("p",null," Repository data is used to provide the anonymization service. If you purchase a plan, Stripe processes payment and billing information. When a repository is removed or expires, only its configuration is retained \u2014 this makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),n("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[n("div",{class:"panel-body p-3"},[n("p",null,[h("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),n("a",{href:"/connections"},"GitHub connections"),h(" page.")]),n("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),n("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),n("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[n("div",{class:"panel-body p-3"},[n("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),c(" Self-Hosting "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#project-icon-storage"})]),h("Self-Hosting ")]),n("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),n("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[n("div",{class:"panel-body p-3"},[n("p",null,[h( Line truncated
jane.smith@example.org`},null,2),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),t[86]||(t[86]=n("small",{class:"form-text text-muted"},"One term per line.",-1)),n("details",eN,[t[83]||(t[83]=n("summary",null,"Regex & replacement syntax",-1)),t[84]||(t[84]=h()),n("small",tN,[t[77]||(t[77]=h("Regex is supported. Replaced by ",-1)),n("code",null,u(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[78]||(t[78]=h(", or use ",-1)),t[79]||(t[79]=n("code",null,"term=>replacement",-1)),t[80]||(t[80]=h(" to pick your own (e.g. ",-1)),t[81]||(t[81]=n("code",null,"Anonymous=>ABC",-1)),t[82]||(t[82]=h(").",-1))])]),T(n("div",nN,"Regex characters detected. Escape them if unintentional.",512),[[Z,e.termsRegexWarning]]),T(n("div",oN,"Terms are in an invalid format.",512),[[Z,e.anonymize?.terms?.errors?.format]])])],512),[[Z,e.detectedType]]),T(n("section",sN,[t[107]||(t[107]=n("h2",{class:"paper-section-eyebrow"},"Display",-1)),T(n("div",null,[n("div",iN,[T(n("input",rN,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[88]||(t[88]=n("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),n("div",aN,[T(n("input",lN,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[89]||(t[89]=n("label",{class:"form-check-label",for:"image"},"Display images",-1))]),n("div",dN,[T(n("input",uN,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[90]||(t[90]=n("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1))]),n("div",cN,[T(n("input",pN,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[91]||(t[91]=n("label",{class:"form-check-label",for:"notebook"},"Display Notebooks",-1))]),n("div",fN,[T(n("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,mN),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[92]||(t[92]=n("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?c("v-if",!0):(l(),d("small",hN,u(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",vN,u(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):c("v-if",!0)])],512),[[Z,e.detectedType==="repo"]]),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",gN,[...t[93]||(t[93]=[h("Images and PDFs are served unchanged. Review their contents and metadata before sharing. ",-1),n("a",{href:"/faq#formats"},"Supported formats",-1)])])):c("v-if",!0),T(n("div",null,[n("div",yN,[T(n("input",bN,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[94]||(t[94]=n("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),n("div",wN,[T(n("input",kN,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[95]||(t[95]=n("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),n("div",CN,[T(n("input",EN,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[96]||(t[96]=n("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),n("div",SN,[T(n("input",NN,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[97]||(t[97]=n("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),n("div",RN,[T(n("input",DN,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[98]||(t[98]=n("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),n("div",TN,[T(n("input",_N,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[99]||(t[99]=n("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[Z,e.detectedType==="gist"]]),T(n("div",null,[n("div",AN,[T(n("input",ON,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[100]||(t[100]=n("label",{class:"form-check-label",for:"title"},"PR title",-1))]),n("div",PN,[T(n("input",IN,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[101]||(t[101]=n("label",{class:"form-check-label",for:"body"},"PR body",-1))]),n("div",MN,[T(n("input",VN,null,512),[[s,{state:e.viewState,set:a=>{e.options.diff=a},value:e.op Line truncated
anonymous_github`)])])])])]),c(" Limitations "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-warning"})]),h("Limitations ")]),n("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),n("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[n("div",{class:"panel-body p-3"},[n("ul",null,[n("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),n("li",null," Files larger than 8 MB are not supported. "),n("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),n("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),c(" Privacy & Security "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-shield"})]),h("Privacy & Security ")]),n("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),n("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[n("div",{class:"panel-body p-3"},[n("p",null," Repository data is used to provide the anonymization service. If you purchase a plan, Stripe processes payment and billing information. When a repository is removed or expires, only its configuration is retained. This makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),n("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[n("div",{class:"panel-body p-3"},[n("p",null,[h("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),n("a",{href:"/connections"},"GitHub connections"),h(" page.")]),n("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),n("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),n("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[n("div",{class:"panel-body p-3"},[n("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),c(" Self-Hosting "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#project-icon-storage"})]),h("Self-Hosting ")]),n("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),n("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[n("div",{class:"panel-body p-3"},[n("p",null,[h(" Yes. Line truncated
anonymized repository often think it is about the paper, so the
label names the service and the tooltip says who to contact. `),t[23]||(t[23]=ce('<li class="nav-item d-none d-lg-block"><a class="nav-link" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" title="Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors." data-offset="30"><svg class="ui-icon d-lg-none mr-1" aria-hidden="true"><use href="#ui-icon-bug"></use></svg>Report a bug </a></li><li class="nav-item nav-support-item d-none d-lg-block"><a class="nav-link nav-support-inline" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" title="Donate on Ko-fi to help cover hosting costs"><svg class="ui-icon nav-heart" aria-hidden="true"><use href="#ui-icon-heart"></use></svg>Support </a></li>',2)),e.isDarkMode?c("v-if",!0):(l(),d("li",I5,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to dark mode","aria-label":"Switch to dark mode",onClick:t[0]||(t[0]=o=>{e.darkMode(!0)})},[...t[16]||(t[16]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",M5,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to light mode","aria-label":"Switch to light mode",onClick:t[1]||(t[1]=o=>{e.darkMode(!1)})},[...t[17]||(t[17]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sun"})],-1)])])])):c("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",V5,[...t[18]||(t[18]=[n("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[n("i",{class:"fab fa-github mr-1"}),h(" Sign in ")],-1)])])):c("v-if",!0),e.user?.username&&e.headerCanUpgrade&&!e.headerBillingPending?(l(),d("li",q5,[n("a",{class:"nav-link nav-upgrade",href:"/profile?upgrade=1",onClick:t[2]||(t[2]=le(o=>e.openHeaderUpgrade(),["prevent"]))},"Upgrade")])):c("v-if",!0),e.user?(l(),d("li",L5,[n("a",$5,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,U5)):c("v-if",!0),n("span",F5,u(e.user?.username),1)]),n("div",B5,[n("h6",z5,"Signed in as @"+u(e.user?.username),1),t[20]||(t[20]=ce('<a class="dropdown-item" href="/profile"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-filter"></use></svg><span>Settings<small>Defaults, quotas, account</small></span></a><a class="dropdown-item" href="/connections"><i class="fab fa-github" aria-hidden="true"></i><span>GitHub connections<small>Repository access and OAuth</small></span></a><a class="dropdown-item" href="/claim"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg><span>Claim an anonymization<small>Attach an existing mirror to your account</small></span></a><div class="dropdown-divider"></div><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-bug"></use></svg><span>Report a bug<small>About this service, not a paper</small></span></a><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener"><i class="fab fa-github" aria-hidden="true"></i><span>Source code</span></a>',6)),e.headerShowSupport?(l(),d("a",H5,[...t[19]||(t[19]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-heart"})],-1),n("span",null,"Support the project",-1)])])):c("v-if",!0),t[21]||(t[21]=n("div",{class:"dropdown-divider"},null,-1)),t[22]||(t[22]=n("a",{class:"dropdown-item",href:"/api/user/logout",target:"_self"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-logout"})]),n("span",null,"Sign out")],-1))])])):c("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,j5)):c("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[7]||(t[7]=le(o=>e.respondToEmailPrompt("later"),["prevent"]))},[n("form",{onSubmit:t[6]||(t[6]=le(o=>e.respondToEmailPrompt("save"),["prevent"]))},[t[26]||(t[26]=n("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[27]||(t[27]=n("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[28]||(t[28]=n("label",{for:"email-prompt-address"},"Email address",-1)),_(n("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[3]||(t[3]=o=>e.emailPromptAddress=o),disabled:e.emailPromptBusy},null,8,G5),[[it,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",W5,u(e.emailPromptError),1)):c("v-if",!0),n("div",K5,[n("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[4]||(t[4]=o=>e.respondToEmailPrompt( Line truncated
python experiments/run.py`),n("p",null,[h("Contact: "),n("span",{class:"redact",role:"img","aria-label":"Redacted term 3"},[n("i",null,"3")])])])])])])],-1))]),c(" Live stats "),n("section",o8,[t[9]||(t[9]=n("div",{class:"paper-stats-meta"},[n("div",{class:"paper-stats-meta-left"},[n("span",{class:"paper-stats-dot","aria-hidden":"true"}),h(" Live \xB7 last 60 days \xB7 updated daily")]),n("div",{class:"paper-stats-meta-right"},"Used by authors at ICSE \xB7 FSE \xB7 OOPSLA")],-1)),n("div",s8,[(l(!0),d(W,null,oe(e.cards,(o,i)=>(l(),d("div",{class:"paper-stat-card",key:o?.key},[n("div",{class:O(["paper-stat-value",{"is-pending":!e.stat}])},u(e.stat?e.fmt?.bigNum(o?.total):"\u2014"),3),n("div",i8,u(o?.label),1),e.history[o?.key].bars?.length>1?(l(),d("div",r8," +"+u(e.fmt?.number(e.history[o?.key].deltaToday))+" today ",1)):c("v-if",!0)]))),128))])]),c(" Before / after "),t[25]||(t[25]=n("section",{class:"paper-section-head paper-wrap"},[n("div",null,[n("div",{class:"paper-eyebrow"},"Try it"),n("h2",null,[h("The same repository, "),n("em",null,"minus you.")])]),n("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),n("div",a8,[n("div",l8,[t[10]||(t[10]=n("label",{for:"demo-terms"},[h("Terms to redact "),n("span",null,"comma-separated, try adding your own")],-1)),_(n("input",{id:"demo-terms",type:"text","onUpdate:modelValue":t[0]||(t[0]=o=>e.demoTerms=o),spellcheck:"false",autocomplete:"off"},null,512),[[it,e.demoTerms]])]),n("div",d8,[n("div",u8,[t[12]||(t[12]=n("div",{class:"pane-header"},[n("span",{class:"pane-label"},"Your repository"),n("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")],-1)),n("div",c8,[n("div",p8,[(l(!0),d(W,null,oe(e.demoParts(),(o,i)=>(l(),d(W,{key:i},[o.redacted?(l(),d("mark",f8,u(o.original),1)):(l(),d(W,{key:1},[h(u(o.text),1)],64))],64))),128)),t[11]||(t[11]=h("\u200B",-1))]),_(n("textarea",{class:"pane-body demo-input","onUpdate:modelValue":t[1]||(t[1]=o=>e.demoText=o),spellcheck:"false","aria-label":"Sample README to anonymize"},null,512),[[it,e.demoText]])])]),n("div",m8,[n("div",h8,[t[13]||(t[13]=n("span",{class:"pane-label"},"What reviewers see",-1)),n("span",v8,u(e.demoCount())+" redacted \xB7 anonymous.4open.science/r/paper-7f2a",1)]),n("div",g8,[(l(!0),d(W,null,oe(e.demoParts(),(o,i)=>(l(),d(W,{key:i},[o.redacted?(l(),d("span",{key:0,class:"redact-chip",title:"Replaces \u201C"+o.original+"\u201D"},u(o.text),9,y8)):(l(),d(W,{key:1},[h(u(o.text),1)],64))],64))),128))])])])]),c(" What you get: one screenshot, three tabs "),t[26]||(t[26]=n("section",{class:"paper-section-head paper-wrap",id:"about"},[n("div",null,[n("div",{class:"paper-eyebrow"},"What you get"),n("h2",null,[h("Anonymize, review, "),n("em",null,"manage.")])]),n("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),n("section",b8,[n("div",w8,[(l(!0),d(W,null,oe(e.features,(o,i)=>(l(),d("div",{class:O(["paper-feature",{"is-on":e.feature===o?.key}]),key:o?.key},[n("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:s=>e.selectFeature(o.key),onKeydown:s=>e.featureKeydown(s,i),id:"feature-tab-"+o?.key,"aria-controls":"feature-panel-"+o?.key,"aria-selected":e.feature===o?.key,tabindex:e.feature===o?.key?0:-1},[n("span",C8,u(o?.num)+" \xB7 "+u(o?.eyebrow),1),n("span",E8,[h(u(o?.title)+" ",1),n("em",null,u(o?.accent),1)])],40,k8),n("div",S8,[n("span",N8,[h(u(o?.title)+" ",1),n("em",null,u(o?.accent),1)]),n("p",null,u(o?.text),1),n("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(o)),target:e.featureTarget(o)},u(o?.cta)+" \u2192",9,R8)])],2))),128))]),n("div",D8,[(l(!0),d(W,null,oe(e.features,(o,i)=>_((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:o?.key,id:"feature-panel-"+o?.key,"aria-labelledby":"feature-tab-"+o?.key},[n("div",T8,[n("div",A8,[t[14]||(t[14]=n("span",{class:"dots"},[n("i"),n("i"),n("i")],-1)),n("span",O8,u(o?.url),1)]),n("div",{class:O(["feat-mock","is-"+o?.key]),role:"img","aria-label":o?.alt},[o?.key==="anonymize"?(l(),d("div",I8,[...t[15]||(t[15]=[ce('<div class="fm-label">GitHub repository</div><div class="fm-input">github.com/jane-smith/DeepLearnUtils</div><div class="fm-label">Terms to redact</div><div class="fm-chips"><span>Jane Smith</span><span>MIT CSAIL</span><span>jane.smith@mit.edu</span><span class="fm-chip-add">+ Add term</span></div><div class="fm-row"><div><div class="fm-label">Reviewers can see</div><div class="fm-toggles"><span class="is-on">Images</span><span class="is-on">PDFs</span><span>Links</span><span class="is-on">Notebooks</span></div></div><div><div class="fm-label">Expires</div><div class="fm-input fm-input-sm">Mar 31, 2027</div></div></div><div class="fm-actions"><span class="fm-share">anonymous.4open.science/r/paper-7 Line truncated
label names the service and the tooltip says who to contact. `),t[25]||(t[25]=me('<li class="nav-item d-none d-lg-block"><a class="nav-link" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" title="Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors." data-offset="30"><svg class="ui-icon d-lg-none mr-1" aria-hidden="true"><use href="#ui-icon-bug"></use></svg>Report a bug </a></li><li class="nav-item nav-support-item d-none d-lg-block"><a class="nav-link nav-support-inline" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" title="Donate on Ko-fi to help cover hosting costs"><svg class="ui-icon nav-heart" aria-hidden="true"><use href="#ui-icon-heart"></use></svg>Support </a></li>',2)),e.isDarkMode?c("v-if",!0):(l(),d("li",q5,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to dark mode","aria-label":"Switch to dark mode",onClick:t[1]||(t[1]=o=>{e.darkMode(!0)})},[...t[18]||(t[18]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",L5,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to light mode","aria-label":"Switch to light mode",onClick:t[2]||(t[2]=o=>{e.darkMode(!1)})},[...t[19]||(t[19]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sun"})],-1)])])])):c("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",$5,[...t[20]||(t[20]=[n("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[n("i",{class:"fab fa-github mr-1"}),h(" Sign in ")],-1)])])):c("v-if",!0),e.user?.username&&e.headerCanUpgrade&&!e.headerBillingPending?(l(),d("li",U5,[n("a",{class:"nav-link nav-upgrade",href:"/profile?upgrade=1",onClick:t[3]||(t[3]=ae(o=>e.openHeaderUpgrade(),["prevent"]))},"Upgrade")])):c("v-if",!0),e.user?(l(),d("li",F5,[n("a",B5,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,z5)):c("v-if",!0),n("span",H5,u(e.user?.username),1)]),n("div",j5,[n("h6",G5,"Signed in as @"+u(e.user?.username),1),t[22]||(t[22]=me('<a class="dropdown-item" href="/profile"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-filter"></use></svg><span>Settings<small>Defaults, quotas, account</small></span></a><a class="dropdown-item" href="/connections"><i class="fab fa-github" aria-hidden="true"></i><span>GitHub connections<small>Repository access and OAuth</small></span></a><a class="dropdown-item" href="/claim"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg><span>Claim an anonymization<small>Attach an existing mirror to your account</small></span></a><div class="dropdown-divider"></div><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-bug"></use></svg><span>Report a bug<small>About this service, not a paper</small></span></a><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener"><i class="fab fa-github" aria-hidden="true"></i><span>Source code</span></a>',6)),e.headerShowSupport?(l(),d("a",W5,[...t[21]||(t[21]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-heart"})],-1),n("span",null,"Support the project",-1)])])):c("v-if",!0),t[23]||(t[23]=n("div",{class:"dropdown-divider"},null,-1)),t[24]||(t[24]=n("a",{class:"dropdown-item",href:"/api/user/logout",target:"_self"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-logout"})]),n("span",null,"Sign out")],-1))])])):c("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,K5)):c("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[8]||(t[8]=ae(o=>e.respondToEmailPrompt("later"),["prevent"]))},[n("form",{onSubmit:t[7]||(t[7]=ae(o=>e.respondToEmailPrompt("save"),["prevent"]))},[t[28]||(t[28]=n("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[29]||(t[29]=n("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[30]||(t[30]=n("label",{for:"email-prompt-address"},"Email address",-1)),T(n("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[4]||(t[4]=o=>e.emailPromptAddress=o),disabled:e.emailPromptBusy},null,8,Y5),[[it,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",J5,u(e.emailPromptError),1)):c("v-if",!0),n("div",Q5,[n("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[5]||(t[5]=o=>e.respondToEmailPrompt( Line truncated
python experiments/run.py`),n("p",null,[h("Contact: "),n("span",{class:"redact",role:"img","aria-label":"Redacted term 3"},[n("i",null,"3")])])])])])])],-1))]),c(" Live stats "),n("section",r8,[t[9]||(t[9]=n("div",{class:"paper-stats-meta"},[n("div",{class:"paper-stats-meta-left"},[n("span",{class:"paper-stats-dot","aria-hidden":"true"}),h(" Live \xB7 last 60 days \xB7 updated daily")]),n("div",{class:"paper-stats-meta-right"},"Used by authors at ICSE \xB7 FSE \xB7 OOPSLA")],-1)),n("div",a8,[(l(!0),d(W,null,oe(e.cards,(o,i)=>(l(),d("div",{class:"paper-stat-card",key:o?.key},[n("div",{class:O(["paper-stat-value",{"is-pending":!e.stat}])},u(e.stat?e.fmt?.bigNum(o?.total):"\u2014"),3),n("div",l8,u(o?.label),1),e.history[o?.key].bars?.length>1?(l(),d("div",d8," +"+u(e.fmt?.number(e.history[o?.key].deltaToday))+" today ",1)):c("v-if",!0)]))),128))])]),c(" Before / after "),t[25]||(t[25]=n("section",{class:"paper-section-head paper-wrap"},[n("div",null,[n("div",{class:"paper-eyebrow"},"Try it"),n("h2",null,[h("The same repository, "),n("em",null,"minus you.")])]),n("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),n("div",u8,[n("div",c8,[t[10]||(t[10]=n("label",{for:"demo-terms"},[h("Terms to redact "),n("span",null,"comma-separated, try adding your own")],-1)),T(n("input",{id:"demo-terms",type:"text","onUpdate:modelValue":t[0]||(t[0]=o=>e.demoTerms=o),spellcheck:"false",autocomplete:"off"},null,512),[[it,e.demoTerms]])]),n("div",p8,[n("div",f8,[t[12]||(t[12]=n("div",{class:"pane-header"},[n("span",{class:"pane-label"},[h("Your repository "),n("span",{class:"pane-edit-hint"},"\xB7 editable")]),n("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")],-1)),n("div",m8,[n("div",h8,[(l(!0),d(W,null,oe(e.demoParts(),(o,i)=>(l(),d(W,{key:i},[o.redacted?(l(),d("mark",v8,u(o.original),1)):(l(),d(W,{key:1},[h(u(o.text),1)],64))],64))),128)),t[11]||(t[11]=h("\u200B",-1))]),T(n("textarea",{class:"pane-body demo-input","onUpdate:modelValue":t[1]||(t[1]=o=>e.demoText=o),spellcheck:"false","aria-label":"Sample README to anonymize"},null,512),[[it,e.demoText]])])]),n("div",g8,[n("div",y8,[t[13]||(t[13]=n("span",{class:"pane-label"},"What reviewers see",-1)),n("span",b8,[n("span",w8,u(e.demoCount())+" redacted",1)])]),n("div",k8,[(l(!0),d(W,null,oe(e.demoParts(),(o,i)=>(l(),d(W,{key:i},[o.redacted?(l(),d("span",{key:0,class:"redact-chip",title:"Replaces \u201C"+o.original+"\u201D"},u(o.text),9,C8)):(l(),d(W,{key:1},[h(u(o.text),1)],64))],64))),128))])])])]),c(" What you get: one screenshot, three tabs "),t[26]||(t[26]=n("section",{class:"paper-section-head paper-wrap",id:"about"},[n("div",null,[n("div",{class:"paper-eyebrow"},"What you get"),n("h2",null,"Anonymize, review, manage.")]),n("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),n("section",E8,[n("div",S8,[(l(!0),d(W,null,oe(e.features,(o,i)=>(l(),d("div",{class:O(["paper-feature",{"is-on":e.feature===o?.key}]),key:o?.key},[n("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:s=>e.selectFeature(o.key),onKeydown:s=>e.featureKeydown(s,i),id:"feature-tab-"+o?.key,"aria-controls":"feature-panel-"+o?.key,"aria-selected":e.feature===o?.key,tabindex:e.feature===o?.key?0:-1},[n("span",R8,u(o?.num)+" \xB7 "+u(o?.eyebrow),1),n("span",D8,u(o?.title)+" "+u(o?.accent),1)],40,N8),n("div",T8,[n("span",_8,u(o?.title)+" "+u(o?.accent),1),n("p",null,u(o?.text),1),n("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(o)),target:e.featureTarget(o)},u(o?.cta)+" \u2192",9,A8)])],2))),128))]),n("div",O8,[(l(!0),d(W,null,oe(e.features,(o,i)=>T((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:o?.key,id:"feature-panel-"+o?.key,"aria-labelledby":"feature-tab-"+o?.key},[n("div",I8,[n("div",M8,[t[14]||(t[14]=n("span",{class:"dots"},[n("i"),n("i"),n("i")],-1)),n("span",V8,u(o?.url),1)]),n("div",{class:O(["feat-mock","is-"+o?.key]),role:"img","aria-label":o?.alt},[o?.key==="anonymize"?(l(),d("div",L8,[...t[15]||(t[15]=[me('<div class="fm-label">GitHub repository</div><div class="fm-input">github.com/jane-smith/DeepLearnUtils</div><div class="fm-label">Terms to redact</div><div class="fm-chips"><span>Jane Smith</span><span>MIT CSAIL</span><span>jane.smith@mit.edu</span><span class="fm-chip-add">+ Add term</span></div><div class="fm-row"><div><div class="fm-label">Reviewers can see</div><div class="fm-toggles"><span class="is-on">Images</span><span class="is-on">PDFs</span><span>Links</span><span class="is-on">Notebooks</span></div></div><div><div class="fm-label">Expires</div><div class="fm-input fm-input-sm">Mar 31, 2027</div></div></div><div class="fm-actions"><span class="fm-share">anonymous.4open.science/r/paper-7f2a</span><span class="fm-btn"> Line truncated
<span class="ln">2</span><span class="c"># Author: <span class="redact">XXXX-1</span>, <span class="redact">XXXX-2</span></span>
<span class="ln">3</span><span class="k">import</span> torch
<span class="ln">4</span><span class="k">from</span> utils <span class="k">import</span> load_config
@@ -37,12 +37,13 @@ python experiments/run.py`),n("p",null,[h("Contact: "),n("span",{class:"redact",
<span class="ln">7</span> model = build_model(config)
<span class="ln">8</span> <span class="k">for</span> epoch <span class="k">in</span> range(config.epochs):
<span class="ln">9</span> loss = step(model)
<span class="ln">10</span> log(<span class="s">&quot;epoch %d: %.3f&quot;</span>, epoch, loss)</pre></div>`,2)])])):(l(),d("div",V8,[...t[17]||(t[17]=[ce('<div class="fm-dash-head"><span>Project</span><span>Status</span><span>Views</span><span>Expires</span></div><div class="fm-dash-row"><span><b>DeepLearnUtils</b><i>paper-7f2a \xB7 ICSE 2027</i></span><span class="st is-ready">Ready</span><span>41</span><span>Mar 31, 2027</span></div><div class="fm-dash-row"><span><b>vision-bench#212</b><i>pull request \xB7 FSE 2027</i></span><span class="st is-ready">Ready</span><span>12</span><span>Never</span></div><div class="fm-dash-row"><span><b>graph-repair</b><i>gr-91ab</i></span><span class="st is-progress">Updating</span><span>5</span><span>Jan 5, 2027</span></div><div class="fm-dash-row is-muted"><span><b>JarSift</b><i>OOPSLA 2025</i></span><span class="st is-expired">Expired</span><span>72</span><span>Sep 28, 2026</span></div>',5)])]))],10,P8)])],8,_8)),[[X,e.feature===o?.key]])),128))])]),c(" FAQ teaser "),t[27]||(t[27]=ce('<section class="paper-qa paper-wrap" aria-labelledby="qa-heading"><div><div class="paper-eyebrow">Before you sign in</div><h2 id="qa-heading">The questions that <em>come up most.</em></h2><a class="paper-link-arrow" href="/faq">Read the full FAQ \u2192</a></div><div><div class="q"><a href="/faq#permissions">What access does GitHub sign-in require?</a><p> The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories. </p></div><div class="q"><a href="/faq#formats">Which file formats are supported?</a><p> Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged. </p></div><div class="q"><a href="/faq#expiration">What happens when an anonymized repository expires?</a><p> You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over. </p></div></div></section>',1)),n("footer",q8,[n("div",L8,[t[21]||(t[21]=n("div",{class:"paper-footer-brand"},[n("div",{class:"paper-footer-mark"},[h("Anonymous "),n("em",null,"GitHub")]),n("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),n("div",$8,[t[18]||(t[18]=n("div",{class:"paper-footer-head"},"Product",-1)),t[19]||(t[19]=n("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",U8,"My work")):c("v-if",!0),e.user?(l(),d("a",F8,"Conferences")):c("v-if",!0),t[20]||(t[20]=n("a",{href:"/faq"},"FAQ",-1))]),t[22]||(t[22]=ce('<div class="paper-footer-col"><div class="paper-footer-head">Project</div><a href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener">Source code</a><a href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener">Report a bug</a><a href="https://github.com/sponsors/tdurieux/" target="_blank" rel="noopener">Support</a></div><div class="paper-footer-col"><div class="paper-footer-head">Contact</div><a href="mailto:tdurieux@anonymous.4open.science">Email maintainer</a><a href="https://github.com/tdurieux" target="_blank" rel="noopener">@tdurieux</a></div>',2))]),t[24]||(t[24]=n("div",{class:"paper-footer-rule"},null,-1)),n("div",B8,[n("span",null,"\xA9 "+u(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[23]||(t[23]=n("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var z8={class:"paper-empty"},H8={class:"paper-empty-inner"},j8={key:0,class:"paper-eyebrow"},G8={key:1,class:"paper-eyebrow"},W8={key:2,class:"paper-empty-title"},K8=["textContent"];function Yl(e,t){return l(),d("div",z8,[n("div",H8,[e.error?c("v-if",!0):(l(),d("div",j8,"Working")),e.error?(l(),d("div",G8,"Error")):c("v-if",!0),e.error?c("v-if",!0):(l(),d("h1",W8,[...t[0]||(t[0]=[h(" Loading",-1),n("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:u(e.fmt.translate(e.error))},null,8,K8)):c("v-if",!0)])])}var Y8={class:"container paper-page paper-settings"},J8={class:"paper-crumbs"},Q8={class:"here"},X8={class:"paper-page-title"},Z8={class:"paper-settings-body"},x8={class:"paper-settings-toc"},eM={href:"#conf-billing"},tM={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},nM={id:"conf-basics",class:"paper-settings-section"},oM={class:"form-group"},sM={class:"invalid-feedback"},iM={class:"invalid-feedback"},rM={class:"form-group"},aM={class:"invalid-feedback"},lM={class:"form-group"},dM={class:"invalid-feedback"},uM={class:"invalid-feedback"},cM={id:"conf-window",class:"paper-settings-section"},pM={class:"form-grid-2"},fM={class:"form-group"},mM={class:"invalid-feedback"},hM={class:"invalid-feedback"},vM={class:"form-group"},gM={class:"invalid-feedback"},yM={class:"invalid-feedback"},bM={Line truncated
`).length))+" lines",1)):c("v-if",!0),e.type=="html"&&e.fileSize(e.filePath)!=null?(l(),d("span",hV,u(e.formatSize(e.fileSize(e.filePath))),1)):c("v-if",!0),e.redactionCount()?(l(),d("b",vV,u(e.redactionCount())+" redacted",1)):c("v-if",!0)]),_(n("button",{type:"button",class:"btn btn-sm btn-icon-only btn-ghost copy-path-btn","aria-label":e.pathCopied?"Path copied":"Copy path",title:e.pathCopied?"Path copied":"Copy path",onClick:t[2]||(t[2]=a=>e.copyPath())},[(l(),d("svg",yV,[n("use",{href:e.pathCopied?"#ui-icon-check":"#ui-icon-link"},null,8,bV)]))],8,gV),[[X,e.filePath]])]),e.type!="html"&&typeof e.content=="string"?(l(),d("span",wV,[e.languageName?(l(),d(W,{key:0},[h(u(e.languageName),1),t[31]||(t[31]=n("span",{class:"sep"},"\xB7",-1))],64)):c("v-if",!0),h(u(e.fmt?.number(e.content.split(`
`).length))+" lines",1),n("span",kV,[t[32]||(t[32]=n("span",{class:"sep"},"\xB7",-1)),h(u(e.content.length<1024?e.content.length+" B":(e.content.length/1024).toFixed(1)+" KB"),1)]),e.redactionCount()?(l(),d(W,{key:1},[t[33]||(t[33]=n("span",{class:"sep"},"\xB7",-1)),n("span",CV,u(e.redactionCount())+" redacted",1)],64)):c("v-if",!0)])):c("v-if",!0),e.type=="html"?(l(),d("span",EV,[t[36]||(t[36]=h("Markdown",-1)),e.fileSize(e.filePath)!=null?(l(),d(W,{key:0},[t[34]||(t[34]=n("span",{class:"sep"},"\xB7",-1)),h(u(e.formatSize(e.fileSize(e.filePath))),1)],64)):c("v-if",!0),e.redactionCount()?(l(),d(W,{key:1},[t[35]||(t[35]=n("span",{class:"sep"},"\xB7",-1)),n("span",SV,u(e.redactionCount())+" redacted",1)],64)):c("v-if",!0)])):c("v-if",!0),n("div",NV,[e.type!="html"&&e.symbols().length>1?(l(),d("div",RV,[n("button",{type:"button",class:O(["btn btn-sm btn-ghost btn-symbols",{"is-on":e.symbolsOpen}]),"aria-expanded":e.symbolsOpen?"true":"false","aria-haspopup":"true",title:"Symbols in this file",onClick:t[3]||(t[3]=a=>e.symbolsOpen=!e.symbolsOpen)},[...t[37]||(t[37]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-list"})],-1),n("span",{class:"btn-find-label"},"Symbols",-1)])],10,DV),e.symbolsOpen?(l(),d("div",_V,[n("div",TV,u(e.symbols().length)+" "+u(e.symbols().length===1?"symbol":"symbols"),1),(l(!0),d(W,null,oe(e.symbols(),a=>(l(),d("button",{type:"button",class:"symbols-item",role:"menuitem",key:a.line+a.name,onClick:p=>e.goToSymbol(a.line)},[n("span",{class:O(["symbols-kind","is-"+a.kind])},u(a.kind==="class"?"C":a.kind==="function"?"\u0192":"v"),3),n("span",OV,u(a.name),1),n("span",PV,u(a.line),1)],8,AV))),128))])):c("v-if",!0)])):c("v-if",!0),e.type=="html"?(l(),d("button",{key:1,type:"button",class:O(["btn btn-sm btn-ghost btn-icon-only btn-find btn-md-find",{"is-on":e.mdFindOpen}]),"aria-label":"Find on this page",title:"Find on this page ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[4]||(t[4]=a=>e.toggleMdFind())},[...t[38]||(t[38]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],10,IV)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:2,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-find","aria-label":"Find in file",title:"Find in file ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[5]||(t[5]=a=>e.findInFile())},[...t[39]||(t[39]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],8,MV)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:3,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-goto","aria-label":"Go to line",title:"Go to line ("+(e.isMac?"\u2318":"Ctrl+")+"G)",onClick:t[6]||(t[6]=a=>e.gotoLine())},[...t[40]||(t[40]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1)])],8,VV)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:4,type:"button",class:O(["btn btn-sm btn-icon-only btn-ghost btn-toggle",{"is-on":e.wrapLines}]),"aria-pressed":e.wrapLines?"true":"false","aria-label":"Wrap long lines",title:"Wrap long lines (Alt+Z)",onClick:t[7]||(t[7]=a=>e.toggleWrap())},[...t[41]||(t[41]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)])],10,qV)):c("v-if",!0),n("div",LV,[n("a",{target:"_self",class:"tb-seg-btn",title:e.type=="html"?"Open the Markdown source":"Open the raw file",href:e.safeUrl(e.url)},"Raw",8,$V),typeof e.content=="string"?(l(),d("button",{key:0,type:"button",class:"tb-seg-btn tb-seg-icon","aria-label":e.contentCopied?"Copied":"Copy file contents",title:e.contentCopied?"Copied":"Copy file contents",onClick:t[8]||(t[8]=a=>e.copyContent())},[(l(),d("svg",FV,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,BV)]))],8,UV)):c("v-if",!0),n("a",{target:"_self",class:"tb-seg-btn tb-seg-icon","aria-label":"Download file",title:"Download file",href:e.safeUrl(e.url+"&download=true")},[...t[42]||(t[42]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1)])],8,zV)]),typeof e.content=="string"?(l(),d("button",{key:5,type:"button",class:"btn btn-sm btn-icon-only btn-ghost tb-copy-m","aria-label":e.contentCopied?"Copied":"Copy file contents",onClick:t[9]||(t[9]=a=>e.copyContent())},[(l(),d("svg",jV,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,GV)]))],8,HV)):c("v-if",!0),n("div",WV,[n("button",{type:"button",class:O(["btn btn-sm btn-icon-only btn-ghost tb-more-btn",{"is-on":e.moreOpen}]),"aria-label":"More actions","aria-haspopup":"true","aria-expanded":e.moreOpen?"true":"false",onClick:t[10]||(t[10]=le(a=>e.moreOpen=!e.moreOpen,["stop"]))},[(l(),d("svg",YV,[...t[43]||(t[43]=[n("circle",{cx:"5",cy:"12",r:"1.8"},null,-1),n("circle",{cx:"12",cy:"12",r:"1.8"},null,-1),n("circle",{cx:"19",cy:"12",r:"1.8"},null,-1)])]))],10,KV),e.moreOpen?(l(),d("div",{key:0,class:"tb-menu",role:"menu",onClick:t[16]||(t[16]=a=>e.moreOpen=!1)},[e.options?.publishedAt||e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.last Line truncated
<span class="ln">10</span> log(<span class="s">&quot;epoch %d: %.3f&quot;</span>, epoch, loss)</pre></div>`,2)])])):(l(),d("div",U8,[...t[17]||(t[17]=[me('<div class="fm-dash-head"><span>Project</span><span>Status</span><span>Views</span><span>Expires</span></div><div class="fm-dash-row"><span><b>DeepLearnUtils</b><i>paper-7f2a \xB7 ICSE 2027</i></span><span class="st is-ready">Ready</span><span>41</span><span>Mar 31, 2027</span></div><div class="fm-dash-row"><span><b>vision-bench#212</b><i>pull request \xB7 FSE 2027</i></span><span class="st is-ready">Ready</span><span>12</span><span>Never</span></div><div class="fm-dash-row"><span><b>graph-repair</b><i>gr-91ab</i></span><span class="st is-progress">Updating</span><span>5</span><span>Jan 5, 2027</span></div><div class="fm-dash-row is-muted"><span><b>JarSift</b><i>OOPSLA 2025</i></span><span class="st is-expired">Expired</span><span>72</span><span>Sep 28, 2026</span></div>',5)])]))],10,q8)])],8,P8)),[[Z,e.feature===o?.key]])),128))])]),c(" FAQ teaser "),t[27]||(t[27]=me('<section class="paper-qa paper-wrap" aria-labelledby="qa-heading"><div><div class="paper-eyebrow">Before you sign in</div><h2 id="qa-heading">The questions that come up most.</h2><a class="paper-link-arrow" href="/faq">Read the full FAQ \u2192</a></div><div><div class="q"><a href="/faq#permissions">What access does GitHub sign-in require?</a><p> The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories. </p></div><div class="q"><a href="/faq#formats">Which file formats are supported?</a><p> Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged. </p></div><div class="q"><a href="/faq#expiration">What happens when an anonymized repository expires?</a><p> You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over. </p></div></div></section><section class="paper-cta paper-wrap" aria-labelledby="cta-heading"><div><h2 id="cta-heading">Ready for review?</h2><p>Create an anonymous mirror in a couple of minutes. Reviewers just open the link.</p></div><div class="paper-cta-actions"><a class="btn-hero" href="/signin" target="_self"><i class="fab fa-github" aria-hidden="true"></i> Sign in with GitHub</a><a class="paper-link-arrow" href="/faq">Read the FAQ \u2192</a></div></section>',2)),n("footer",F8,[n("div",B8,[t[21]||(t[21]=n("div",{class:"paper-footer-brand"},[n("div",{class:"paper-footer-mark"},[h("Anonymous "),n("em",null,"GitHub")]),n("p",{class:"paper-footer-tag"}," A read-only, identity-stripped mirror of your repository, built for double-anonymous peer review. ")],-1)),n("div",z8,[t[18]||(t[18]=n("div",{class:"paper-footer-head"},"Product",-1)),t[19]||(t[19]=n("a",{href:"/anonymize"},"Anonymize",-1)),e.user?(l(),d("a",H8,"My work")):c("v-if",!0),e.user?(l(),d("a",j8,"Conferences")):c("v-if",!0),t[20]||(t[20]=n("a",{href:"/faq"},"FAQ",-1))]),t[22]||(t[22]=me('<div class="paper-footer-col"><div class="paper-footer-head">Project</div><a href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener">Source code</a><a href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener">Report a bug</a><a href="https://github.com/sponsors/tdurieux/" target="_blank" rel="noopener">Support</a></div><div class="paper-footer-col"><div class="paper-footer-head">Contact</div><a href="mailto:tdurieux@anonymous.4open.science">Email maintainer</a><a href="https://github.com/tdurieux" target="_blank" rel="noopener">@tdurieux</a></div>',2))]),t[24]||(t[24]=n("div",{class:"paper-footer-rule"},null,-1)),n("div",G8,[n("span",null,"\xA9 "+u(e.year||2026)+" Anonymous GitHub \xB7 GPL-3.0 licensed",1),t[23]||(t[23]=n("span",{class:"paper-footer-meta"},"Built for reviewers, by researchers.",-1))])])])}var W8={class:"paper-empty"},K8={class:"paper-empty-inner"},Y8={key:0,class:"paper-eyebrow"},J8={key:1,class:"paper-eyebrow"},Q8={key:2,class:"paper-empty-title"},X8=["textContent"];function Yl(e,t){return l(),d("div",W8,[n("div",K8,[e.error?c("v-if",!0):(l(),d("div",Y8,"Working")),e.error?(l(),d("div",J8,"Error")):c("v-if",!0),e.error?c("v-if",!0):(l(),d("h1",Q8,[...t[0]||(t[0]=[h(" Loading",-1),n("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:u(e.fmt.translate(e.error))},null,8,X8)):c("v-if",!0)])])}var Z8={class:"container paper-page paper-settings"},x8={class:"paper-crumbs"},eM={class:"here"},tM={class:"paper-page-title"},nM={class:"paper-settings-body"},oM={class:"paper-settings-toc"},sM={href:"#conf-billing"},iM={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},rM={id:"conf-basics",class:"paper-settings-section"},aM={class:"form-group"},lM={class:"invalLine truncated
`).length))+" lines",1)):c("v-if",!0),e.type=="html"&&e.fileSize(e.filePath)!=null?(l(),d("span",bV,u(e.formatSize(e.fileSize(e.filePath))),1)):c("v-if",!0),e.redactionCount()?(l(),d("b",wV,u(e.redactionCount())+" redacted",1)):c("v-if",!0)]),T(n("button",{type:"button",class:"btn btn-sm btn-icon-only btn-ghost copy-path-btn","aria-label":e.pathCopied?"Path copied":"Copy file path",title:e.pathCopied?"Path copied":"Copy file path",onClick:t[2]||(t[2]=a=>e.copyPath())},[(l(),d("svg",CV,[n("use",{href:e.pathCopied?"#ui-icon-check":"#ui-icon-link"},null,8,EV)]))],8,kV),[[Z,e.filePath]])]),e.type!="html"&&typeof e.content=="string"?(l(),d("span",SV,[e.languageName?(l(),d(W,{key:0},[h(u(e.languageName),1),t[34]||(t[34]=n("span",{class:"sep"},"\xB7",-1))],64)):c("v-if",!0),h(u(e.fmt?.number(e.content.split(`
`).length))+" lines",1),n("span",NV,[t[35]||(t[35]=n("span",{class:"sep"},"\xB7",-1)),h(u(e.content.length<1024?e.content.length+" B":(e.content.length/1024).toFixed(1)+" KB"),1)]),e.redactionCount()?(l(),d(W,{key:1},[t[36]||(t[36]=n("span",{class:"sep"},"\xB7",-1)),n("span",RV,u(e.redactionCount())+" redacted",1)],64)):c("v-if",!0)])):c("v-if",!0),e.type=="html"?(l(),d("span",DV,[t[39]||(t[39]=h("Markdown",-1)),e.fileSize(e.filePath)!=null?(l(),d(W,{key:0},[t[37]||(t[37]=n("span",{class:"sep"},"\xB7",-1)),h(u(e.formatSize(e.fileSize(e.filePath))),1)],64)):c("v-if",!0),e.redactionCount()?(l(),d(W,{key:1},[t[38]||(t[38]=n("span",{class:"sep"},"\xB7",-1)),n("span",TV,u(e.redactionCount())+" redacted",1)],64)):c("v-if",!0)])):c("v-if",!0),n("div",_V,[e.type!="html"&&e.symbols().length>1?(l(),d("div",AV,[n("button",{type:"button",class:O(["btn btn-sm btn-ghost btn-symbols",{"is-on":e.symbolsOpen}]),"aria-expanded":e.symbolsOpen?"true":"false","aria-haspopup":"true",title:"Symbols in this file",onClick:t[3]||(t[3]=a=>e.symbolsOpen=!e.symbolsOpen)},[...t[40]||(t[40]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-list"})],-1),n("span",{class:"btn-find-label"},"Symbols",-1)])],10,OV),e.symbolsOpen?(l(),d("div",PV,[n("div",IV,u(e.symbols().length)+" "+u(e.symbols().length===1?"symbol":"symbols"),1),(l(!0),d(W,null,oe(e.symbols(),a=>(l(),d("button",{type:"button",class:"symbols-item",role:"menuitem",key:a.line+a.name,onClick:p=>e.goToSymbol(a.line)},[n("span",{class:O(["symbols-kind","is-"+a.kind])},u(a.kind==="class"?"C":a.kind==="function"?"\u0192":"v"),3),n("span",VV,u(a.name),1),n("span",qV,u(a.line),1)],8,MV))),128))])):c("v-if",!0)])):c("v-if",!0),e.type=="html"?(l(),d("button",{key:1,type:"button",class:O(["btn btn-sm btn-ghost btn-icon-only btn-find btn-md-find",{"is-on":e.mdFindOpen}]),"aria-label":"Find on this page",title:"Find on this page ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[4]||(t[4]=a=>e.toggleMdFind())},[...t[41]||(t[41]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],10,LV)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:2,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-find","aria-label":"Find in file",title:"Find in file ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[5]||(t[5]=a=>e.findInFile())},[...t[42]||(t[42]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],8,$V)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:3,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-goto","aria-label":"Go to line",title:"Go to line ("+(e.isMac?"\u2318":"Ctrl+")+"G)",onClick:t[6]||(t[6]=a=>e.gotoLine())},[...t[43]||(t[43]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1)])],8,UV)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:4,type:"button",class:O(["btn btn-sm btn-icon-only btn-ghost btn-toggle",{"is-on":e.wrapLines}]),"aria-pressed":e.wrapLines?"true":"false","aria-label":"Wrap long lines",title:"Wrap long lines (Alt+Z)",onClick:t[7]||(t[7]=a=>e.toggleWrap())},[...t[44]||(t[44]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)])],10,FV)):c("v-if",!0),n("div",BV,[n("a",{target:"_self",class:"tb-seg-btn",title:e.type=="html"?"Open the Markdown source":"Open the raw file",href:e.safeUrl(e.url)},"Raw",8,zV),typeof e.content=="string"?(l(),d("button",{key:0,type:"button",class:"tb-seg-btn tb-seg-icon","aria-label":e.contentCopied?"Copied":"Copy file contents",title:e.contentCopied?"Copied":"Copy file contents",onClick:t[8]||(t[8]=a=>e.copyContent())},[(l(),d("svg",jV,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,GV)]))],8,HV)):c("v-if",!0),n("a",{target:"_self",class:"tb-seg-btn tb-seg-icon","aria-label":"Download file",title:"Download file",href:e.safeUrl(e.url+"&download=true")},[...t[45]||(t[45]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1)])],8,WV)]),typeof e.content=="string"?(l(),d("button",{key:5,type:"button",class:"btn btn-sm btn-icon-only btn-ghost tb-copy-m","aria-label":e.contentCopied?"Copied":"Copy file contents",onClick:t[9]||(t[9]=a=>e.copyContent())},[(l(),d("svg",YV,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,JV)]))],8,KV)):c("v-if",!0),e.type=="html"&&e.readmeToc().length>=3?(l(),d("div",QV,[n("button",{type:"button",class:O(["btn btn-sm btn-icon-only btn-ghost tb-toc-btn",{"is-on":e.tocOpen}]),"aria-label":"On this page",title:"On this page","aria-haspopup":"true","aria-expanded":e.tocOpen?"true":"false",onClick:t[10]||(t[10]=ae(a=>{e.tocOpen=!e.tocOpen,e.moreOpen=!1},["stop"]))},[...t[46]||(t[46]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-outline"})],-1)])],10,XV),e.tocOpen?(l(),d("div",{key:0,class:"tb-menu tb-toc-menu",role:"menu",onClick:t[12]||(t[12]=a=>e.tocOpen=!1)},[t[47]||(t[47]=n("div",{class:"tb-menu-label"},"On this page",-1)),n("button Line truncated
`).length))+" lines",1)],64)):c("v-if",!0),h(" \xB7 "+u(e.type=="html"&&e.fileSize(e.filePath)!=null?e.formatSize(e.fileSize(e.filePath)):e.content.length<1024?e.content.length+" B":(e.content.length/1024).toFixed(1)+" KB"),1)])):c("v-if",!0),e.options?.publishedAt||e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate?(l(),d("div",s6)):c("v-if",!0),e.type=="html"?(l(),d("button",{key:3,type:"button",role:"menuitem",onClick:t[14]||(t[14]=a=>e.toggleMdFind())},[...t[50]||(t[50]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),h("Find in file",-1)])])):c("v-if",!0),e.type=="html"?(l(),d("div",i6)):c("v-if",!0),e.type!="html"?(l(),d("button",{key:5,type:"button",role:"menuitem",onClick:t[15]||(t[15]=a=>e.findInFile())},[...t[51]||(t[51]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),h("Find in file",-1)])])):c("v-if",!0),e.type!="html"?(l(),d("button",{key:6,type:"button",role:"menuitem",onClick:t[16]||(t[16]=a=>e.gotoLine())},[...t[52]||(t[52]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1),h("Go to line",-1)])])):c("v-if",!0),e.type!="html"?(l(),d("button",{key:7,type:"button",role:"menuitemcheckbox","aria-checked":e.wrapLines?"true":"false",onClick:t[17]||(t[17]=a=>e.toggleWrap())},[t[53]||(t[53]=n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)),t[54]||(t[54]=h("Wrap lines",-1)),e.wrapLines?(l(),d("span",a6,"\u2713")):c("v-if",!0)],8,r6)):c("v-if",!0),e.type!="html"?(l(),d("div",l6)):c("v-if",!0),e.type=="html"?(l(),d("a",{key:9,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[55]||(t[55]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),h("View raw",-1)])],8,d6)):c("v-if",!0),e.type!="html"?(l(),d("a",{key:10,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[56]||(t[56]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),h("View raw",-1)])],8,u6)):c("v-if",!0),n("a",{role:"menuitem",target:"_self",href:e.safeUrl(e.url+"&download=true")},[...t[57]||(t[57]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1),h("Download file",-1)])],8,c6),e.options?.download?(l(),d("a",{key:11,role:"menuitem",target:"_self",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[58]||(t[58]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-archive"})],-1),h("Download ZIP",-1)])],8,p6)):c("v-if",!0),n("button",{type:"button",role:"menuitem",onClick:t[18]||(t[18]=a=>e.copyPath())},[...t[59]||(t[59]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-link"})],-1),h("Copy file path",-1)])]),t[60]||(t[60]=n("div",{class:"tb-menu-sep"},null,-1)),t[61]||(t[61]=n("a",{role:"menuitem",href:"/faq"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-help"})]),h("FAQ")],-1)),t[62]||(t[62]=n("a",{role:"menuitem",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",target:"_blank",rel:"noopener"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-bug"})]),h("Report a bug")],-1))])):c("v-if",!0)])])]),e.type!="html"?T((l(),d("div",f6,null,512)),[[r,{content:e.content,options:e.aceOption}]]):c("v-if",!0),e.type=="html"&&e.mdFindOpen?(l(),d("div",m6,[n("input",{type:"search",class:"md-find-input",placeholder:"Find on this page","aria-label":"Find on this page",value:e.mdFindQuery,onInput:t[20]||(t[20]=a=>{e.mdFindQuery=a.target.value,e.runMdFind()}),onKeydown:[t[21]||(t[21]=yt(ae(a=>a.shiftKey?e.stepMdFind(-1):e.stepMdFind(1),["prevent"]),["enter"])),t[22]||(t[22]=yt(ae(a=>e.toggleMdFind(!1),["prevent"]),["esc"]))]},null,40,h6),n("span",v6,[n("button",{type:"button","aria-label":"Previous match",onClick:t[23]||(t[23]=a=>e.stepMdFind(-1)),disabled:!e.mdFindTotal},[...t[63]||(t[63]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-left"})],-1)])],8,g6),n("button",{type:"button","aria-label":"Next match",onClick:t[24]||(t[24]=a=>e.stepMdFind(1)),disabled:!e.mdFindTotal},[...t[64]||(t[64]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-right"})],-1)])],8,y6)]),n("span",b6,u(e.mdFindQuery?e.mdFindTotal?e.mdFindIndex+1+" of "+e.mdFindTotal:"No results":""),1),n("button",{type:"button",class:O(["md-find-opt",{"is-on":e.mdFindCase}]),"aria-pressed":e.mdFindCase?"true":"false",title:"Match case","aria-label":"Match case",onClick:t[25]||(t[25]=a=>{e.mdFindCase=!e.mdFindCase,e.runMdFind()})},"Aa",10,w6),n("button",{type:"button",class:"md-find-close","aria-label":"Close find",onClick:t[26]||(t[26]=a=>e.toggleMdFind(!1))},"\xD7")])):c("v-if",!0),e.type=="html"?(l(),d("div",k6,[n("div",{class:"file-content markdown-body",innerHTML:e.renderReadme(e.sanitize(e.content))},null,8,C6),e.readmeToc().length>=3?(l(),d("aside",E6,[t[65]||(t[65]=n("div",{class:"readme-toc-head"}," Line truncated
MIT CSAIL
jane.smith@example.org`},Q6={class:"settings-syntax"},X6={class:"invalid-feedback"},Z6={class:"settings-row"},x6={class:"settings-checks"},eL={class:"settings-check"},tL={class:"form-check-input",type:"checkbox",id:"link",name:"link"},nL={class:"settings-check"},oL={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},sL={class:"settings-check"},iL={class:"form-check-input",type:"checkbox",id:"image",name:"image"},rL={class:"settings-check"},aL={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},lL={class:"settings-check"},dL={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},uL={class:"settings-check"},cL={class:"form-check-input",type:"checkbox",id:"page",name:"page"},pL={class:"settings-row"},fL={class:"settings-check"},mL={class:"form-check-input",type:"checkbox",id:"update",name:"update"},hL={class:"settings-row"},vL={class:"form-control",id:"expiration",name:"expiration"},gL={class:"settings-help"},yL={class:"settings-save"},bL={class:"settings-save-status draft-status",role:"status"},wL={key:0},kL={key:1},CL={key:2},EL=["disabled"],SL={key:1,class:"settings-save-error",role:"alert"},NL=["aria-busy"],RL={key:0,role:"status"},DL={key:1,class:"settings-notice",role:"alert"},_L=["disabled"],TL={key:2,class:"settings-notice",role:"status"},AL={key:3,class:"settings-notice",role:"status"},OL=["disabled"],PL={class:"settings-row"},IL={class:"settings-inline"},ML={key:0,class:"settings-help"},VL={key:0,class:"settings-help"},qL={id:"settings-quota"},LL={key:1,role:"status"},$L={key:1,class:"settings-notice"},UL={key:2,class:"settings-notice"},FL={key:3,class:"settings-notice"},BL={key:4,class:"settings-help"},zL={key:5,class:"settings-plan billing-plan"},HL={class:"settings-comparison"},jL={class:"settings-cycles"},GL=["checked","onChange"],WL={class:"settings-help"},KL={class:"settings-actions"},YL=["disabled"],JL={key:6,class:"settings-help"},QL={class:"settings-row"},XL={key:0,class:"settings-inline"},ZL=["disabled"],xL={key:1,class:"settings-help"},e$=["disabled"],t$={key:4,class:"settings-row"},n$={class:"settings-inline"},o$=["disabled"],s$={key:0,class:"settings-pass"},i$={class:"settings-help"},r$=["disabled"],a$={key:5,class:"settings-row"},l$={class:"settings-help"},d$={id:"settings-account",class:"settings-account-panel"},u$={class:"paper-account-card"},c$=["src"],p$={class:"paper-account-identity"},f$={class:"paper-account-name"},m$=["disabled"],h$={key:0,role:"status"},v$={key:1,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},g$=["disabled"],y$={key:3,role:"status"},b$={class:"paper-danger-zone"},w$={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},k$=["textContent"],C$=["disabled"],E$={key:1,class:"settings-delete-confirm"},S$={for:"delete-username"},N$={class:"settings-actions"},R$=["disabled"],D$=["disabled"];function Zl(e,t){let o=Ge("quota-usage"),i=we("field"),s=we("form");return l(),d("div",H6,[n("header",j6,[t[20]||(t[20]=n("h1",null,"Settings",-1)),n("div",G6,[n("span",null,"@"+u(e.user?.username),1)])]),n("nav",W6,[(l(),d(W,null,oe([{id:"defaults",label:"Anonymization defaults"},{id:"billing",label:"Hosting & billing"},{id:"account",label:"Account"}],r=>n("button",{type:"button","aria-current":e.settingsTab===r.id?"page":null,onClick:a=>e.settingsTab=r.id},u(r.label),9,K6)),64))]),_(n("div",null,[t[41]||(t[41]=n("p",{class:"settings-scope"},"For new anonymizations only. Existing repositories keep their settings.",-1)),_((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[1]||(t[1]=le(r=>e.submitForm(r,()=>{e.saveDefault(r)}),["prevent"]))},[n("section",Y6,[t[26]||(t[26]=n("div",null,[n("label",{class:"settings-label",for:"terms"},"Terms to redact"),n("p",{class:"settings-help"},"One term per line.")],-1)),n("div",null,[_(n("textarea",J6,null,512),[[i,{state:e.viewState,set:r=>{e.terms=r},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),n("details",Q6,[t[25]||(t[25]=n("summary",null,"Regex & replacement syntax",-1)),n("p",null,[t[21]||(t[21]=h("Matches become ",-1)),n("code",null,u(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[22]||(t[22]=h(". Use ",-1)),t[23]||(t[23]=n("code",null,"term=>replacement",-1)),t[24]||(t[24]=h(" for a custom replacement. Regex is supported.",-1))])]),_(n("div",X6,"Terms are in an invalid format.",512),[[X,e.defaultsForm?.terms?.errors?.format]])])]),n("section",Z6,[t[35]||(t[35]=n("h2",null,"Reviewer display",-1)),n("div",null,[n("div",x6,[n("label",eL,[_(n("input",tL,null,512),[[i,{state:e.viewState,set:r=>{e.options.link=r},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=h("Keep links",-1))]),n("label",nL,[_(n("input",oL,null,512),[[i,{state:e.viewState,set:r=>{e.options.notebook=r},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[28]||(t[28]=h("Render notebooks",-1))]),n("label",sL,[_(n("input",iL,null,512),[[i,{state:e.viewState,set:r=>{e.options.image=r},value:e.options?.image Line truncated
`);for(let w=0;w<b.length;w++){let m=b[w];if(m.startsWith("diff --git")){y(),f();continue}if(m.startsWith("--- ")){r&&r.lines.length&&y(),f().oldPath=m.replace(/^--- (a\/)?/,"").trim();continue}if(m.startsWith("+++ ")){f().newPath=m.replace(/^\+\+\+ (b\/)?/,"").trim();continue}if(!(m.startsWith("index ")||m.startsWith("similarity index")||m.startsWith("rename ")||m.startsWith("new file mode")||m.startsWith("deleted file mode")||m.startsWith("Binary files"))){if(m.startsWith("@@")){let E=m.match(/@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);E&&(a=parseInt(E[1],10),p=parseInt(E[2],10)),f().lines.push({kind:"hunk",oldNo:"",newNo:"",text:m});continue}r&&(m.startsWith("+")?(r.lines.push({kind:"add",oldNo:"",newNo:p,text:m.slice(1)}),p++):m.startsWith("-")?(r.lines.push({kind:"remove",oldNo:a,newNo:"",text:m.slice(1)}),a++):(r.lines.push({kind:"ctx",oldNo:a,newNo:p,text:m.startsWith(" ")?m.slice(1):m}),a++,p++))}}return o(s,r),s.join("")}})({trustAsHtml:e=>e});function YU(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function JU(e){return String(e??"").toUpperCase()}function QU(e,t,o=0){return(e||[]).slice(o,o+t)}function XU(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function ZU(e,t){if(!t)return e||[];let o=Array.isArray(t)?t:[t];return[...e||[]].sort((i,s)=>{for(let r of o){let a=r[0]==="-"?-1:1;r=r.replace(/^[+-]/,"");let p=r.split(".").reduce((y,b)=>y?.[b],i),f=r.split(".").reduce((y,b)=>y?.[b],s);if(typeof p=="string"&&(p=p.toLowerCase()),typeof f=="string"&&(f=f.toLowerCase()),p!==f)return(p==null?-1:f==null?1:p<f?-1:1)*a}return 0})}function xU(e,t){if(!e)return"";let o=new Date(e);if(isNaN(o))return String(e);if(!t||t==="mediumDate")return o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});let i={yyyy:o.getFullYear(),MMM:o.toLocaleDateString(void 0,{month:"short"}),MM:String(o.getMonth()+1).padStart(2,"0"),dd:String(o.getDate()).padStart(2,"0"),d:o.getDate(),HH:String(o.getHours()).padStart(2,"0"),mm:String(o.getMinutes()).padStart(2,"0"),ss:String(o.getSeconds()).padStart(2,"0")};return t.replace(/yyyy|MMM|MM|dd|HH|mm|ss|d/g,s=>i[s])}function eF(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var rd={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=et(null);return Ft(()=>{let i=[t.value][0];i.classList.add("html-doc");function s(){i.innerHTML="";let r=e.content;if(typeof r!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let p=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&p.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",p.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),i.appendChild(a);let f="";e.baseUrl&&(f='<base href="'+e.baseUrl.replace(/&/g,"&amp;").replace(/"/g,"&quot;")+'">'),a.srcdoc=f+r}Fe(()=>e.content,s,{immediate:!0}),Fe(()=>e.baseUrl,s,{immediate:!0}),Fe(()=>e.allowScripts,s,{immediate:!0})}),()=>Se("html-doc",{ref:t})}};var ad={name:"pdfviewer",props:["src"],setup(e){let t=et(null);return Ft(()=>{let o=[t.value],i=400,s=[.5,.75,1,1.25,1.5,2,3],r=1e3,a=o[0];a.classList.add("pdf-viewer");let p=null,f=[],y=!1,b=null,w=1,m=1,E=0,I=0,C=612/792,v=0,S=null,D=new Map,V=0;function F(k){let N=D.get(k);N&&(N.cancelled=!0,N.task?.cancel?.(),D.delete(k));let q=k.querySelector("canvas");q&&(q.width=0,q.height=0),k.innerHTML="",delete k.dataset.state}let L=document.createElement("div");L.className="pdf-toolbar";let G=document.createElement("div");G.className="pdf-pages",G.tabIndex=0,G.setAttribute("aria-label","PDF pages"),a.appendChild(L),a.appendChild(G);function ie(k,N,q){let H=document.createElement("button");return H.type="button",H.className="pdf-toolbar-btn",H.title=N,H.setAttribute("aria-label",N),H.innerHTML='<i class="fas '+k+'"></i>',H.addEventListener("click",q),H}let te=ie("fa-chevron-up","Previous page",function(){ze(m-1)}),R=ie("fa-chevron-down","Next page",function(){ze(m+1)}),Y=document.createElement("input");Y.type="text",Y.className="pdf-toolbar-page",Y.setAttribute("aria-label","Page number"),Y.title="Page number \u2014 type a page and press Enter",Y.addEventListener("keydown",function(k){k.key==="Enter"&&(ze(parseInt(Y.value,10)),Y.blur())}),Y.addEventListener("blur",function(){Y.value=String(m)});let ne=document.createElement("span");ne.className="pdf-toolbar-count";let ve=ie("fa-search-minus","Zoom out",function(){j(s[Math.max(0,be()-1)])}),ee=ie("fa-search-plus","Zoom in",function(){j(s[Math.min(s.length-1,be()+1)])}),de=document.createElement("button");de.type="button",de.className="pdf-toolbar-btn pdf-toolbar-zoom",de.title="Reset zoom to fit the width",de.setAttribute("aria-label","Reset zoom to fit the width"),de.addEventListener("click",function(){j(1)}),L.appendChild(te),L.appendChild(R);let he=document.createElement("span");he.className="pdf-toolbar-group",he.appendChi Line truncated
jane.smith@example.org`},aL={class:"settings-syntax"},lL={class:"invalid-feedback"},dL={class:"settings-row"},uL={class:"settings-checks"},cL={class:"settings-check"},pL={class:"form-check-input",type:"checkbox",id:"link",name:"link"},fL={class:"settings-check"},mL={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},hL={class:"settings-check"},vL={class:"form-check-input",type:"checkbox",id:"image",name:"image"},gL={class:"settings-check"},yL={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},bL={class:"settings-check"},wL={class:"form-check-input",type:"checkbox",id:"loc",name:"loc"},kL={class:"settings-check"},CL={class:"form-check-input",type:"checkbox",id:"page",name:"page"},EL={class:"settings-row"},SL={class:"settings-check"},NL={class:"form-check-input",type:"checkbox",id:"update",name:"update"},RL={class:"settings-row"},DL={class:"form-control",id:"expiration",name:"expiration"},TL={class:"settings-help"},_L={class:"settings-save"},AL={class:"settings-save-status draft-status",role:"status"},OL={key:0},PL={key:1},IL={key:2},ML=["disabled"],VL={key:1,class:"settings-save-error",role:"alert"},qL=["aria-busy"],LL={key:0,role:"status"},$L={key:1,class:"settings-notice",role:"alert"},UL=["disabled"],FL={key:2,class:"settings-notice",role:"status"},BL={key:3,class:"settings-notice",role:"status"},zL=["disabled"],HL={class:"settings-row"},jL={class:"settings-inline"},GL={key:0,class:"settings-help"},WL={key:0,class:"settings-help"},KL={id:"settings-quota"},YL={key:1,role:"status"},JL={key:1,class:"settings-notice"},QL={key:2,class:"settings-notice"},XL={key:3,class:"settings-notice"},ZL={key:4,class:"settings-help"},xL={key:5,class:"settings-plan billing-plan"},e$={class:"settings-comparison"},t$={class:"settings-cycles"},n$=["checked","onChange"],o$={class:"settings-help"},s$={class:"settings-actions"},i$=["disabled"],r$={key:6,class:"settings-help"},a$={class:"settings-row"},l$={key:0,class:"settings-inline"},d$=["disabled"],u$={key:1,class:"settings-help"},c$=["disabled"],p$={key:4,class:"settings-row"},f$={class:"settings-inline"},m$=["disabled"],h$={key:0,class:"settings-pass"},v$={class:"settings-help"},g$=["disabled"],y$={key:5,class:"settings-row"},b$={class:"settings-help"},w$={id:"settings-account",class:"settings-account-panel"},k$={class:"paper-account-card"},C$=["src"],E$={class:"paper-account-identity"},S$={class:"paper-account-name"},N$=["disabled"],R$={key:0,role:"status"},D$={key:1,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},T$=["disabled"],_$={key:3,role:"status"},A$={class:"paper-danger-zone"},O$={key:0,class:"paper-inline-alert paper-inline-alert-error",role:"alert"},P$=["textContent"],I$=["disabled"],M$={key:1,class:"settings-delete-confirm"},V$={for:"delete-username"},q$={class:"settings-actions"},L$=["disabled"],$$=["disabled"];function Zl(e,t){let o=Ge("quota-usage"),i=we("field"),s=we("form");return l(),d("div",eL,[n("header",tL,[t[20]||(t[20]=n("h1",null,"Settings",-1)),n("div",nL,[n("span",null,"@"+u(e.user?.username),1)])]),n("nav",oL,[(l(),d(W,null,oe([{id:"defaults",label:"Anonymization defaults"},{id:"billing",label:"Hosting & billing"},{id:"account",label:"Account"}],r=>n("button",{type:"button","aria-current":e.settingsTab===r.id?"page":null,onClick:a=>e.settingsTab=r.id},u(r.label),9,sL)),64))]),T(n("div",null,[t[41]||(t[41]=n("p",{class:"settings-scope"},"For new anonymizations only. Existing repositories keep their settings.",-1)),T((l(),d("form",{class:"form needs-validation",name:"defaultsForm",novalidate:"",onSubmit:t[1]||(t[1]=ae(r=>e.submitForm(r,()=>{e.saveDefault(r)}),["prevent"]))},[n("section",iL,[t[26]||(t[26]=n("div",null,[n("label",{class:"settings-label",for:"terms"},"Terms to redact"),n("p",{class:"settings-help"},"One term per line.")],-1)),n("div",null,[T(n("textarea",rL,null,512),[[i,{state:e.viewState,set:r=>{e.terms=r},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),n("details",aL,[t[25]||(t[25]=n("summary",null,"Regex & replacement syntax",-1)),n("p",null,[t[21]||(t[21]=h("Matches become ",-1)),n("code",null,u(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[22]||(t[22]=h(". Use ",-1)),t[23]||(t[23]=n("code",null,"term=>replacement",-1)),t[24]||(t[24]=h(" for a custom replacement. Regex is supported.",-1))])]),T(n("div",lL,"Terms are in an invalid format.",512),[[Z,e.defaultsForm?.terms?.errors?.format]])])]),n("section",dL,[t[35]||(t[35]=n("h2",null,"Reviewer display",-1)),n("div",null,[n("div",uL,[n("label",cL,[T(n("input",pL,null,512),[[i,{state:e.viewState,set:r=>{e.options.link=r},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=h("Keep links",-1))]),n("label",fL,[T(n("input",mL,null,512),[[i,{state:e.viewState,set:r=>{e.options.notebook=r},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[28]||(t[28]=h("Render notebooks",-1))]),n("label",hL,[T(n("input",vL,null,512),[[i,{state:e.viewState,set:r=>{e.options.image=r},value:e.options?.image Line truncated
`);for(let w=0;w<b.length;w++){let m=b[w];if(m.startsWith("diff --git")){y(),f();continue}if(m.startsWith("--- ")){r&&r.lines.length&&y(),f().oldPath=m.replace(/^--- (a\/)?/,"").trim();continue}if(m.startsWith("+++ ")){f().newPath=m.replace(/^\+\+\+ (b\/)?/,"").trim();continue}if(!(m.startsWith("index ")||m.startsWith("similarity index")||m.startsWith("rename ")||m.startsWith("new file mode")||m.startsWith("deleted file mode")||m.startsWith("Binary files"))){if(m.startsWith("@@")){let E=m.match(/@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);E&&(a=parseInt(E[1],10),p=parseInt(E[2],10)),f().lines.push({kind:"hunk",oldNo:"",newNo:"",text:m});continue}r&&(m.startsWith("+")?(r.lines.push({kind:"add",oldNo:"",newNo:p,text:m.slice(1)}),p++):m.startsWith("-")?(r.lines.push({kind:"remove",oldNo:a,newNo:"",text:m.slice(1)}),a++):(r.lines.push({kind:"ctx",oldNo:a,newNo:p,text:m.startsWith(" ")?m.slice(1):m}),a++,p++))}}return o(s,r),s.join("")}})({trustAsHtml:e=>e});function iF(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function rF(e){return String(e??"").toUpperCase()}function aF(e,t,o=0){return(e||[]).slice(o,o+t)}function lF(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function dF(e,t){if(!t)return e||[];let o=Array.isArray(t)?t:[t];return[...e||[]].sort((i,s)=>{for(let r of o){let a=r[0]==="-"?-1:1;r=r.replace(/^[+-]/,"");let p=r.split(".").reduce((y,b)=>y?.[b],i),f=r.split(".").reduce((y,b)=>y?.[b],s);if(typeof p=="string"&&(p=p.toLowerCase()),typeof f=="string"&&(f=f.toLowerCase()),p!==f)return(p==null?-1:f==null?1:p<f?-1:1)*a}return 0})}function uF(e,t){if(!e)return"";let o=new Date(e);if(isNaN(o))return String(e);if(!t||t==="mediumDate")return o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});let i={yyyy:o.getFullYear(),MMM:o.toLocaleDateString(void 0,{month:"short"}),MM:String(o.getMonth()+1).padStart(2,"0"),dd:String(o.getDate()).padStart(2,"0"),d:o.getDate(),HH:String(o.getHours()).padStart(2,"0"),mm:String(o.getMinutes()).padStart(2,"0"),ss:String(o.getSeconds()).padStart(2,"0")};return t.replace(/yyyy|MMM|MM|dd|HH|mm|ss|d/g,s=>i[s])}function cF(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}var rd={name:"htmlDoc",props:["content","baseUrl","allowScripts"],setup(e){let t=et(null);return Ft(()=>{let i=[t.value][0];i.classList.add("html-doc");function s(){i.innerHTML="";let r=e.content;if(typeof r!="string")return;let a=document.createElement("iframe");a.className="html-doc-frame",a.setAttribute("title","Rendered HTML document");let p=["allow-popups","allow-popups-to-escape-sandbox"];e.allowScripts&&p.push("allow-scripts","allow-forms","allow-modals"),a.setAttribute("sandbox",p.join(" ")),a.setAttribute("referrerpolicy","no-referrer"),i.appendChild(a);let f="";e.baseUrl&&(f='<base href="'+e.baseUrl.replace(/&/g,"&amp;").replace(/"/g,"&quot;")+'">'),a.srcdoc=f+r}Fe(()=>e.content,s,{immediate:!0}),Fe(()=>e.baseUrl,s,{immediate:!0}),Fe(()=>e.allowScripts,s,{immediate:!0})}),()=>Se("html-doc",{ref:t})}};var ad={name:"pdfviewer",props:["src"],setup(e){let t=et(null);return Ft(()=>{let o=[t.value],i=400,s=[.5,.75,1,1.25,1.5,2,3],r=1e3,a=o[0];a.classList.add("pdf-viewer");let p=null,f=[],y=!1,b=null,w=1,m=1,E=0,I=0,C=612/792,v=0,S=null,D=new Map,V=0;function F(k){let N=D.get(k);N&&(N.cancelled=!0,N.task?.cancel?.(),D.delete(k));let q=k.querySelector("canvas");q&&(q.width=0,q.height=0),k.innerHTML="",delete k.dataset.state}let L=document.createElement("div");L.className="pdf-toolbar";let G=document.createElement("div");G.className="pdf-pages",G.tabIndex=0,G.setAttribute("aria-label","PDF pages"),a.appendChild(L),a.appendChild(G);function ie(k,N,q){let H=document.createElement("button");return H.type="button",H.className="pdf-toolbar-btn",H.title=N,H.setAttribute("aria-label",N),H.innerHTML='<i class="fas '+k+'"></i>',H.addEventListener("click",q),H}let te=ie("fa-chevron-up","Previous page",function(){ze(m-1)}),R=ie("fa-chevron-down","Next page",function(){ze(m+1)}),Q=document.createElement("input");Q.type="text",Q.className="pdf-toolbar-page",Q.setAttribute("aria-label","Page number"),Q.title="Page number \u2014 type a page and press Enter",Q.addEventListener("keydown",function(k){k.key==="Enter"&&(ze(parseInt(Q.value,10)),Q.blur())}),Q.addEventListener("blur",function(){Q.value=String(m)});let ne=document.createElement("span");ne.className="pdf-toolbar-count";let ve=ie("fa-search-minus","Zoom out",function(){j(s[Math.max(0,be()-1)])}),ee=ie("fa-search-plus","Zoom in",function(){j(s[Math.min(s.length-1,be()+1)])}),de=document.createElement("button");de.type="button",de.className="pdf-toolbar-btn pdf-toolbar-zoom",de.title="Reset zoom to fit the width",de.setAttribute("aria-label","Reset zoom to fit the width"),de.addEventListener("click",function(){j(1)}),L.appendChild(te),L.appendChild(R);let he=document.createElement("span");he.className="pdf-toolbar-group",he.appendChi Line truncated
/*! Bundled license information:
@vue/shared/dist/shared.esm-bundler.js: