From 071406bbf05d11914fe869b95a501e861615a817 Mon Sep 17 00:00:00 2001 From: Rukario Date: Tue, 3 Dec 2024 00:08:47 -0800 Subject: [PATCH] Delete public_html directory --- public_html/index.html | 258 ------------------------------- public_html/transmission-app.css | 2 - public_html/transmission-app.js | 4 - 3 files changed, 264 deletions(-) delete mode 100644 public_html/index.html delete mode 100644 public_html/transmission-app.css delete mode 100644 public_html/transmission-app.js diff --git a/public_html/index.html b/public_html/index.html deleted file mode 100644 index 799faa2..0000000 --- a/public_html/index.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - - - - Transmission Web Interface - - -
-
-
- - -
- - -
- -
- -
- -
- Show - - - -   - -
-
-
- - - -
-
-
- -
-
- - - -
-
-
- -
-
-
    -
    -
    - -
    -

    Drag your torrent files here to add them to Transmission.

    -
    -
    - - diff --git a/public_html/transmission-app.css b/public_html/transmission-app.css deleted file mode 100644 index 029e8bb..0000000 --- a/public_html/transmission-app.css +++ /dev/null @@ -1,2 +0,0 @@ -:root{--z-index-popup: 2;--dialog-logo-padding: calc(var(--dialog-padding) * .66);--dialog-padding: 20px;--logo-size: 64px;--pauseresume-size: 20px;--popup-top: 51px;--toolbar-height: 50px;--black: #000;--blue-100: #51b3f7;--blue-200: #357aaa;--blue-300: #2c7fea;--blue-400: #1847d4;--dark-mode-black: #121212;--dark-mode-white: #c9d1d9;--default-accent-color-dark: #0c2d6b;--default-border-dark: #575757;--default-border-light: #aeaeae;--default-tinted: rgba(128, 128, 144, .125);--green-100: #26aa55;--green-300: #7cef99;--green-400: #67c87f;--green-500: #34dc70;--grey: rgba(128, 128, 130, .66);--grey-200: #e1e4e8;--grey-40: #666;--grey-500: #828282;--grey-900: #191919;--nice-grey: #f8f8f8;--red-500: #d73a49;--white: #fff;--yellow-300: #ffea7f;--image-alt-speed-disabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAQAAACZKrSjAAACOElEQVR42mLABIBOygHIbyeAwu+Mv40qm9q2zkre1rZt27bbcW3btm3bNg5pJpPM7/yFq2+9MpAzuJ03eYmb9PHMhtSgFeQeRjuub1xa4Q/EQ05vNXfaNIgPPZivGR3Pda5cOjhQflWmis8iOva6LWrDCf3lbUbHf8kxzraI/SLadvWBDTegfEZeik+jj4Ab/WGh9LMU31v1UU1vJXKhbAFov8lBfOLQ7JQRQIU/eEhKqz0PTE1p8Y94bPxNNDUy1Cg0o8ovAP1ZTnbiFA5jI5kfAFiW1xnNwzBQa5mar2p6eIjrxv8eIynAk6fN+l/IQQGesFFe4XJ+M1NLARmyi/tWx16Im+bffSMzu9u68thYSQs4hbO5hf4sZRur+YBYKKJdL+UKAEbyi020HOAQK1Qs7Ae+t0If+KcSEY/oq9IMenG+c0x0dUDfbIXbAJxlS20X4Cke2hRPxRFlrpIPgLxo1/AU3Mrl4FcrfCnAU8vFT5boOKBOE9Gxxdtlyvm/P2DBLTbNJwYB+nyHujHAvrTCWq70OdRCcCXyZ+qyq+zPRXzJqoBel98copcsDOjjeZ0z2EgrCDckhPKvqCNaZforwBPQA/jZZWU/l5kAQE2vtlBHiNo5f4xfU158NBf7qgyBVTz0ClzFD5bkFefJMnBTyitbxTdzgC/BA66oHewTqXYEAPmTVpDlpSbzRPoYeTTxxpbrblq/eE8VMUYcEzfFPnVEhvxIgHT/K+3EenE+Nt+iDIGIhxhCqqhVJ+8VkAAAAABJRU5ErkJggg==);--image-alt-speed-enabled: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAADFUlEQVR4Ab1WA5QcTRDe32Zs2zZHsW3btm10z77Ytm3btrXdc3rxZVO1xsy+uajPXfpKX5/FzFGoVkImfJpE+B74uidRdl0mbDv8nCRPtaW3fKsjq2G5AMBBmXK70ZdE+QcAtkogEbHM+q0+yP6zOJVnKWm1JTINRiI2AQJFGoMJBMYuy5QlCeWz+ETtX6i0Ckm+89gS/kBSeb2QYMpPe/w7KrqNTIMibHyoqgDoI8YJaf31Le327/BH6SlhqXBWzFeIj0ZbTEa3/ZQNDLQJqNQbcTJPGtwqypeBsDX+XlYN+08mbCjc2UKA2adQVgr1cY4giePSVK1CUHUIe+prp6i8iDDpWTzw/cIH1BT/LAiTfITTxGn8H3cLFaJVhGBdQUbhayRk3FS0ajk8iahaMbi/42rdCf/q8LoBSURjNaovt/+ANj4VO+gduEH2H+HyQkAbwrBCKDOajVJWLTnorsFt87UVKS+McpHaMgD4JzotDkMK8bsHPd8sehnMxgsPF1G+FCsEdwugWjuxchhYt5WEL/GMgNnFIPymi294abh4b6C4xtkSPjxQJqosvzz26R8A7pWO3evi0yJi43yZBBQN4FtaShFWAHr+MgTqWq4t2REkU7X2Ts7i8w24qaNzFNgzA98Mfp6En4tg7bO7topdM+YVfh5XWZjCMmIGOgGvOwJaeWbI7q1Ou8+42mZ13Z1EkAphmYzoAQHt1AWDAaaGlUQdnIcQZNjMWSU2QE+OYDEhaeqL3BYzp/QU9jcELAcAekBpBwHA5eAoXCSshmuYG7g3yOArXKC2PK7kJuEaI2UgLeBb6CLamJ0y9Hl8iWj1oUVtS0+JjONec3GqVtyPTY1bqyk0PLXbH3IMkiuyN75TxenzP2PwomuVkLYD6Hw9rjkSl0RslfFv3BodMBEQdLFMtKJYCacvtiuwojhr6MscIMo6h5iPLm69CrNe/IUtwKCiysuWUnnW0lPsv7jleAdgogy27VGBCQ9+M/2/Cb7SkNVpB3MSfhhL7fssmD0wuAlxiwDEFgB3Bf3hTGK1zfr4CJlxUMYWF0ZsAAAAAElFTkSuQmCC);--image-baseline: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A');--image-chevron-dn: url('data:image/svg+xml,%0D%0A %0D%0A');--image-chevron-up: url('data:image/svg+xml,%0D%0A %0D%0A');--image-lock-fill: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A');--image-magnet: url('data:image/svg+xml,%0D%0A %0D%0A');--image-pause-circle-active: url('data:image/svg+xml,%0D%0A%0D%0A%0D%0A%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A%0D%0A');--image-pause-circle-idle: url('data:image/svg+xml,%0D%0A%0D%0A%0D%0A %0D%0A <?xmlversion="1.0"encoding="UTF-8"?><!--Generator:AppleNativeCoreSVG232.5--><!DOCTYPEsvgPUBLIC"-//W3C//DTDSVG1.1//EN""http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svgversion="1.1"xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink"width="60"height="59.7949"><g><rectheight="59.7949"opacity="0"width="60"x="0"y="0"/><pathd="M29.882859.7656C46.230559.765659.765646.201259.765629.8828C59.765613.535246.2012029.85350C13.53520013.5352029.8828C046.201213.564559.765629.882859.7656Z"fill="%23808080"/><pathd="M21.357441.6602C19.863341.660219.189540.839819.189539.668L19.189520.0391C19.189518.896519.863318.076221.357418.0762L24.316418.0762C25.839818.076226.513718.896526.513720.0391L26.513739.668C26.513740.839825.839841.660224.316441.6602ZM35.507841.6602C33.984441.660233.310540.839833.310539.668L33.310520.0391C33.310518.896533.984418.076235.507818.0762L38.466818.0762C39.931618.076240.605518.896540.605520.0391L40.605539.668C40.605540.839839.931641.660238.466841.6602Z"fill="%23ffffff"/></g></svg>%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A%0D%0A');--image-play-circle-active: url('data:image/svg+xml,%0D%0A%0D%0A%0D%0A%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A%0D%0A');--image-play-circle-idle: url('data:image/svg+xml,%0D%0A%0D%0A%0D%0A %0D%0A <?xmlversion="1.0"encoding="UTF-8"?><!--Generator:AppleNativeCoreSVG232.5--><!DOCTYPEsvgPUBLIC"-//W3C//DTDSVG1.1//EN""http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svgversion="1.1"xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink"width="60"height="59.7949"><g><rectheight="59.7949"opacity="0"width="60"x="0"y="0"/><pathd="M29.882859.7656C46.230559.765659.765646.201259.765629.8828C59.765613.535246.2012029.85350C13.53520013.5352029.8828C046.201213.564559.765629.882859.7656Z"fill="%23808080"/><pathd="M24.316441.6895C22.910242.539121.298841.865221.298840.4004L21.298819.3945C21.298817.95923.027317.343824.316418.1055L41.513728.3008C42.744129.033242.773430.79141.513731.5527Z"fill="%23ffffff"/></g></svg>%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A%0D%0A');--app-image-url: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A %0D%0A');--audio-image-url: url('data:image/svg+xml,');--folder-image-url: url('data:image/svg+xml,%0D%0A %0D%0A');--font-image-url: url('data:image/svg+xml,');--image-image-url: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A %0D%0A');--package-image-url: url('data:image/svg+xml,');--text-image-url: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A');--video-image-url: url('data:image/svg+xml,%0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A %0D%0A');--progress: 100%;--color-bg-even: var(--default-tinted);--color-bg-tabs: var(--default-tinted);--color-fg-error: var(--red-500);--color-fg-port-closed: var(--red-500);--color-fg-port-open: var(--green-100);--color-progressbar-background-2: var(--green-400);--color-progressbar-leech: var(--blue-200);--color-progressbar-magnet: var(--yellow-300);--color-progressbar-paused: var(--grey-200);--color-progressbar-queued: var(--blue-400);--color-progressbar-verify: var(--yellow-300);--color-toolbar-background: var(--default-tinted);color-scheme:light dark}@media (prefers-color-scheme: dark){:root{--color-bg-hover: var(--grey-40);--color-bg-odd: var(--black);--color-bg-popup: var(--black);--color-bg-primary: var(--black);--color-bg-selected: var(--default-accent-color-dark);--color-bg-warn: #cf6679;--color-border-default: var(--default-border-dark);--color-border-stark: var(--dark-mode-white);--color-border-starkest: var(--grey-500);--color-fg-disabled: var(--grey);--color-fg-on-popup: var(--nice-grey);--color-fg-primary: var(--dark-mode-white);--color-fg-secondary: var(--nice-grey);--color-fg-selected: var(--dark-mode-white);--color-fg-tertiary: var(--grey-500);--color-fg-warn: var(--dark-mode-black);--color-progressbar-fg-1: #edefff;--color-progressbar-fg-2: #edefff;--color-progressbar-fg-3: #edefff;--color-progressbar-paused: var(--grey-500);--color-progressbar-seed-1: var(--green-100);--color-progressbar-seed-2: var(--green-400);--color-progressbar-seed-paused: var(--grey-500);--progress-bar-shadow-1: 1px 1px #000;--progress-bar-shadow-2: 1px 1px #000;--progress-bar-shadow-3: 1px 1px #000}:root .contrast-more{--color-bg-even: var(--black);--color-bg-hover: var(--grey-40);--color-bg-selected: var(--blue-300);--color-bg-tabs: var(--black);--color-bg-warn: #cf6679;--color-border-default: var(--white);--color-border-stark: var(--white);--color-border-starkest: var(--white);--color-fg-disabled: var(--white);--color-fg-error: var(--red-500);--color-fg-on-popup: var(--white);--color-fg-port-closed: var(--red-500);--color-fg-port-open: var(--green-100);--color-fg-primary: var(--white);--color-fg-secondary: var(--white);--color-fg-selected: var(--white);--color-fg-tabs: var(--white);--color-fg-tertiary: var(--white);--color-fg-warn: var(--black);--color-progressbar-fg-1: #fff;--color-progressbar-fg-2: #fff;--color-progressbar-fg-3: #000;--color-progressbar-background-2: var(--white);--color-progressbar-magnet: var(--yellow-300);--color-progressbar-paused: var(--grey-500);--color-progressbar-queued: var(--blue-400);--color-progressbar-seed-1: var(--black);--color-progressbar-seed-2: var(--white);--color-progressbar-seed-paused: var(--grey-500);--color-progressbar-verify: var(--yellow-300);--color-toolbar-background: var(--black);--progress-bar-shadow-3: 0}}@media (prefers-color-scheme: light){:root{--color-bg-hover: var(--nice-grey);--color-bg-odd: var(--white);--color-bg-popup: var(--white);--color-bg-primary: var(--white);--color-bg-selected: var(--blue-300);--color-bg-warn: #e4606d5b;--color-border-default: var(--default-border-light);--color-border-stark: var(--grey-500);--color-border-starkest: #d0d7de;--color-dialog-border: var(--nice-grey);--color-fg-disabled: var(--grey);--color-fg-error: var(--red-500);--color-fg-on-popup: var(--grey-900);--color-fg-port-closed: var(--red-500);--color-fg-port-open: var(--green-400);--color-fg-primary: #404040;--color-fg-secondary: var(--grey-500);--color-fg-selected: var(--nice-grey);--color-fg-tertiary: var(--grey-500);--color-fg-warn: #cf212e;--color-progressbar-fg-1: #303030;--color-progressbar-fg-2: #edefff;--color-progressbar-fg-3: #edefff;--color-progressbar-leech: var(--blue-100);--color-progressbar-magnet: var(--yellow-300);--color-progressbar-paused: var(--grey-200);--color-progressbar-queued: var(--blue-400);--color-progressbar-seed-1: var(--green-500);--color-progressbar-seed-2: var(--green-300);--color-progressbar-seed-paused: var(--grey-200);--color-progressbar-verify: var(--yellow-300);--progress-bar-shadow-1: 0;--progress-bar-shadow-2: 1px 1px #000;--progress-bar-shadow-3: 1px 1px #000}:root .contrast-more{--color-bg-even: var(--white);--color-bg-hover: var(--grey-40);--color-bg-selected: var(--blue-300);--color-bg-tabs: var(--white);--color-bg-warn: #cf6679;--color-border-default: var(--black);--color-border-stark: var(--black);--color-border-starkest: var(--black);--color-fg-disabled: var(--black);--color-fg-error: var(--red-500);--color-fg-on-popup: var(--black);--color-fg-port-closed: var(--red-500);--color-fg-port-open: var(--green-400);--color-fg-primary: var(--black);--color-fg-secondary: var(--black);--color-fg-selected: var(--white);--color-fg-tabs: var(--black);--color-fg-tertiary: var(--black);--color-fg-warn: var(--white);--color-progressbar-background-2: var(--white);--color-progressbar-fg-1: #fff;--color-progressbar-fg-2: #fff;--color-progressbar-fg-3: #000;--color-progressbar-leech: var(--blue-200);--color-progressbar-magnet: var(--yellow-300);--color-progressbar-paused: var(--grey-500);--color-progressbar-queued: var(--blue-400);--color-progressbar-seed-1: var(--black);--color-progressbar-seed-2: var(--white);--color-progressbar-seed-paused: var(--grey-500);--color-progressbar-verify: var(--yellow-300);--color-toolbar-background: var(--white);--progress-bar-shadow-1: 1px 1px #000;--progress-bar-shadow-3: 0}}@supports (background-color: Canvas){:root .contrast-less{--color-bg-odd: Canvas;--color-bg-primary: Canvas;--color-bg-popup: Canvas}}html,body{background-color:var(--color-bg-primary);color:var(--color-fg-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol;height:100%;margin:0}img{border:0}a{color:var(--color-fg-primary);outline:0;text-decoration:underline}.hidden{display:none}#mainwin{display:flex;flex-direction:column;height:100%;position:relative}#mainwin>*{margin:0;padding:0}#mainwin .flexible-space{margin-right:auto}#mainwin-workarea{display:flex;flex:1;flex-direction:row;overflow:auto}.popup,.tabs-container{box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000f;position:absolute}#mainwin-toolbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-border-default);display:flex;flex-direction:row;height:var(--toolbar-height);margin:0;width:100%}#mainwin-toolbar button{background-color:transparent;background-position:center;background-repeat:no-repeat;border:0;border-radius:5px;cursor:pointer;height:var(--toolbar-height);margin-right:6px;user-select:none;-webkit-user-select:none;width:var(--toolbar-height)}#mainwin-toolbar button svg{stroke:var(--color-fg-primary)}#mainwin-toolbar button svg g path{fill:var(--color-fg-primary)}#mainwin-toolbar button:disabled{cursor:default}#mainwin-toolbar button:disabled svg{stroke:var(--color-fg-disabled)}#mainwin-toolbar button:disabled svg g path{fill:var(--color-fg-disabled)}#mainwin-toolbar>.toolbar-separator{border-left:1px solid var(--color-border-default);height:25px;margin:0 6px 0 0}#mainwin-toolbar :nth-last-child(2){border:0;flex-grow:1}.toolbar-icon{stroke:var(--color-fg-primary)}#toolbar-overflow{margin-right:4px}#toolbar-overflow svg{fill:var(--color-fg-primary);height:36px;width:36px}#toolbar-overflow.alt-speed-enabled{background-image:var(--image-alt-speed-enabled);background-position:bottom left;background-size:20px}#mainwin-statusbar{white-space:nowrap;align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-border-default);display:flex;flex-direction:row;height:30px;padding-left:5px}@media (width < 600px){#mainwin-statusbar :not(select):not(input):not(option):not(.flexible-space){display:none}}#mainwin-statusbar #torrent-search{width:100%;max-width:160px}#mainwin-statusbar select{width:70px}#mainwin-statusbar>*{margin-right:5px}#mainwin-statusbar .speed-container{display:inherit;align-items:inherit;flex-direction:inherit}#mainwin-statusbar .speed-container:not(:nth-child(1 of#mainwin-statusbar .speed-container)){width:100px}#mainwin-statusbar #speed-up-icon,#mainwin-statusbar #speed-dn-icon{fill:var(--color-fg-primary)}#mainwin-statusbar #speed-up-icon svg,#mainwin-statusbar #speed-dn-icon svg{width:20px}#mainwin-statusbar #speed-dn-label,#mainwin-statusbar #speed-up-label{text-align:right}#torrent-container{flex-grow:1;left:0;margin:0;overflow:auto;padding:0;right:0}#torrent-list{cursor:pointer;list-style-type:none;margin:0;padding:0;text-align:left;width:100%;user-select:none;-webkit-user-select:none}#torrent-list .torrent{border-bottom:1px solid var(--color-border-default)}#torrent-list .torrent:nth-child(2n){background-color:var(--color-bg-even)}#torrent-list .torrent:nth-child(odd){background-color:var(--color-bg-odd)}#torrent-list .torrent .icon{background-color:var(--color-fg-primary);background-position:center,top left;-webkit-mask-image:var(--mime-icon-url);-webkit-mask-repeat:no-repeat;mask-image:var(--mime-icon-url);mask-repeat:no-repeat}#torrent-list .torrent .icon[data-icon-multifile=true]{-webkit-mask-image:var(--mime-icon-url),var(--folder-image-url);-webkit-mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-image:var(--mime-icon-url),var(--folder-image-url);mask-position:top left,bottom right;mask-repeat:no-repeat,no-repeat;mask-size:16px,16px}#torrent-list .torrent .icon[data-icon-mime-type=audio]{--mime-icon-url: var(--audio-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=application]{--mime-icon-url: var(--app-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=font]{--mime-icon-url: var(--font-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=image]{--mime-icon-url: var(--image-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=model]{--mime-icon-url: var(--package-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=text]{--mime-icon-url: var(--text-image-url)}#torrent-list .torrent .icon[data-icon-mime-type=video]{--mime-icon-url: var(--video-image-url)}#torrent-list .torrent .torrent-name{font-weight:700;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#torrent-list .torrent .torrent-name.compact{font-size:1em;font-weight:400}#torrent-list .torrent .torrent-labels{font-size:small;font-weight:400;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:1px 0}#torrent-list .torrent .torrent-labels.compact{flex:1;font-size:small}#torrent-list .torrent .torrent-label{padding:0 8px;margin:0 2px;border-radius:1em;border:1px solid var(--color-border-default)}#torrent-list .torrent .torrent-progress-details.error,#torrent-list .torrent .torrent-peer-details.error{color:var(--color-fg-error)}#torrent-list .torrent .torrent-progress-details,#torrent-list .torrent .torrent-peer-details{font-size:small}#torrent-list .torrent.compact{--icon-size: 16px;align-items:center;display:flex;flex-direction:row-reverse}#torrent-list .torrent.compact .icon{-webkit-mask-size:var(--icon-size),calc(var(--icon-size) / 2);flex-shrink:0;height:var(--icon-size);mask-size:var(--icon-size),calc(var(--icon-size) / 2);width:var(--icon-size)}#torrent-list .torrent.compact .icon[data-icon-multifile=true]{--mime-icon-url: var(--folder-image-url)}#torrent-list .torrent.compact>*{margin:5px}#torrent-list .torrent:not(.compact){--icon-size: 32px;align-items:center;display:grid;grid-column-gap:12px;grid-template-areas:"icon name labels" "icon progress-text progress-text" "icon progressbar progressbar" "icon peers peers";grid-template-columns:var(--icon-size) auto 1fr;padding:6px 12px}#torrent-list .torrent:not(.compact) .icon{background-size:var(--icon-size),calc(var(--icon-size) / 2);grid-area:icon;height:var(--icon-size);width:var(--icon-size)}#torrent-list .torrent:not(.compact) .torrent-name{grid-area:name}#torrent-list .torrent:not(.compact) .torrent-labels{grid-area:labels}#torrent-list .torrent:not(.compact) .torrent-peer-details{grid-area:peers}#torrent-list .torrent:not(.compact) .torrent-progress{display:flex;flex-direction:row;grid-area:progressbar}#torrent-list .torrent:not(.compact) .torrent-progress-details{grid-area:progress-text}#torrent-list .torrent:not(.compact)>*{margin:1px 0}#torrent-list .torrent.paused{color:var(--color-fg-disabled)}#torrent-list .torrent.paused:not(.selected) .torrent-progress-bar{color:var(--color-fg-primary)}#torrent-list .torrent.paused .icon{background-color:var(--color-fg-disabled)}#torrent-list .torrent.selected{background-color:var(--color-bg-selected);color:var(--color-fg-selected)}#torrent-list .torrent.selected .icon{background-color:var(--color-fg-selected)}#torrent-list .icon{background-position:center;background-repeat:no-repeat}#torrent-list .torrent-pauseresume-button{background-position:center center;background-repeat:no-repeat;background-size:var(--pauseresume-size);margin-left:calc(var(--pauseresume-size) / 2);width:var(--pauseresume-size)}#torrent-list .torrent-pauseresume-button[data-action=pause]{background-image:var(--image-pause-circle-idle)}#torrent-list .torrent-pauseresume-button[data-action=pause]:active,#torrent-list .torrent-pauseresume-button[data-action=pause]:hover{background-image:var(--image-pause-circle-active)}#torrent-list .torrent-pauseresume-button[data-action=resume]{background-image:var(--image-play-circle-idle)}#torrent-list .torrent-pauseresume-button[data-action=resume]:active,#torrent-list .torrent-pauseresume-button[data-action=resume]:hover{background-image:var(--image-play-circle-active)}#torrent-list .torrent-progress-bar{font-size:14px;position:relative;border:1px solid var(--color-border-starkest);border-radius:3px;height:18px}#torrent-list .torrent-progress-bar.full{flex-grow:1;margin:2px 0}#torrent-list .torrent-progress-bar.compact{min-width:100px;width:10vw}#torrent-list .torrent-progress-bar.leech.queued:before{background:var(--color-progressbar-queued)}#torrent-list .torrent-progress-bar.leech:before{background:var(--color-progressbar-leech);color:var(--color-progressbar-fg-2);text-shadow:var(--progress-bar-shadow-2)}#torrent-list .torrent-progress-bar.magnet:before{background:var(--color-progressbar-magnet);color:#000}#torrent-list .torrent-progress-bar.seed.paused:before{background:var(--color-progressbar-seed-paused);color:var(--color-progressbar-fg-1);text-shadow:var(--progress-bar-shadow-1)}#torrent-list .torrent-progress-bar.seed:not(.paused):before{background:var(--color-progressbar-seed-1);color:var(--color-progressbar-fg-2);text-shadow:var(--progress-bar-shadow-2)}#torrent-list .torrent-progress-bar.seed:not(.paused):after{background:var(--color-progressbar-seed-2);color:var(--color-progressbar-fg-3);text-shadow:var(--progress-bar-shadow-3)}#torrent-list .torrent-progress-bar.seed.queued:before{background-color:var(--color-progressbar-seed-1)}#torrent-list .torrent-progress-bar.seed:before{background-color:var(--color-progressbar-seed-1);color:var(--color-progressbar-fg-2);text-shadow:var(--progress-bar-shadow-2)}#torrent-list .torrent-progress-bar.verify:before{background:var(--color-progressbar-verify);color:#000}#torrent-list .torrent-progress-bar.paused:before{background:var(--color-progressbar-paused);color:var(--color-progressbar-fg-1);text-shadow:var(--progress-bar-shadow-1)}#torrent-list .torrent-progress-bar:before,#torrent-list .torrent-progress-bar:after{content:attr(data-progress);height:100%;width:100%;position:absolute;border-radius:2px;text-align:center}#torrent-list .torrent-progress-bar:before{clip-path:polygon(0 0,var(--progress, 30%) 0,var(--progress, 30%) 100%,0 100%)}#torrent-list .torrent-progress-bar:after{clip-path:polygon(var(--progress, 30%) 0,100% 0,100% 100%,var(--progress, 30%) 100%)}@media (width < 600px){input[type=checkbox]{height:20px;width:20px}}@media (width < 600px){#inspector,#prefs-dialog{left:0}}@media (width >= 600px){#inspector,#prefs-dialog{border-left:1px solid var(--color-border-default);width:570px}}#prefs-dialog{background:var(--color-bg-primary);bottom:0;right:0;top:var(--popup-top);z-index:var(--z-index-popup)}#prefs-dialog .tabs-page{grid-column-gap:8px;grid-row-gap:5px;grid-template-columns:1fr 1fr;margin:20px}#prefs-dialog .tabs-page:not(.hidden){display:grid}#prefs-dialog .tabs-page .section-label{font-weight:700;grid-column:span 2;padding-bottom:5px}#prefs-dialog .tabs-page .section-label:not(:first-of-type){margin-top:20px}#prefs-dialog .alt-speed-section-label{background:transparent var(--image-alt-speed-enabled) no-repeat;background-position:left;background-position-y:4px;background-size:20px;padding-left:22px}#prefs-dialog :disabled,#prefs-dialog .disabled{color:var(--color-fg-disabled)}#prefs-dialog #alt-times-div,#prefs-dialog #autostart-div,#prefs-dialog #port-forwarding,#prefs-dialog #randomize-port,#prefs-dialog #suffix-div,#prefs-dialog #use-dht-div,#prefs-dialog #use-lpd-div,#prefs-dialog #use-pex-div,#prefs-dialog #utp-enabled,#prefs-dialog .alt-speed-label{grid-column:span 2}#prefs-dialog #default-trackers{height:300px}#prefs-dialog .blocklist-size-label,#prefs-dialog .blocklist-update-button,#prefs-dialog .register-handler-button,#prefs-dialog .port-status{grid-column:2/3}#prefs-dialog .blocklist-size-label{font-size:smaller}#prefs-dialog .blocklist-size-number{font-weight:bolder}#prefs-dialog .port-status-label{display:inline-block;font-weight:700;margin-left:5px}#prefs-dialog .port-status-label[data-open=true]{color:var(--color-fg-port-open)}#prefs-dialog .port-status-label[data-open=false]{color:var(--color-fg-port-closed)}#prefs-dialog #default-trackers,#prefs-dialog .default-trackers-label{grid-column:1/3}#prefs-dialog .alt-speed-label{font-size:smaller;margin:-10px 0 10px}#prefs-dialog.ui-tabs .ui-tabs-panel{padding:0;user-select:none;-webkit-user-select:none}.tabs-container{align-items:stretch;background:var(--color-bg-primary);bottom:0;display:flex;flex-direction:column;position:absolute;right:0;top:var(--popup-top);z-index:var(--z-index-popup)}@media (width < 600px){.tabs-container{left:0}}@media (width >= 600px){.tabs-container{width:550px}}.tabs-container-close{font-size:150%;cursor:pointer;background:var(--color-bg-primary);border:0;color:var(--color-fg-primary);position:absolute;padding:10px 16px}.tabs-buttons{align-self:center;background-color:var(--color-bg-tabs);border:1px solid var(--color-border-starkest);border-radius:6px;display:flex;margin:10px 0}.tabs-buttons button{appearance:none;border:1px solid transparent;border-radius:6px;color:var(--color-fg-primary);font-weight:400}.tabs-pages{box-sizing:border-box;flex:1;overflow-x:hidden;overflow-y:auto}@media (width < 600px){.tabs-pages{padding:0 8px 20px}}@media (width >= 600px){.tabs-pages{padding:0 20px 20px}}.tabs-button{background:none;border:1px solid transparent;font-size:14px;padding:3px 8px}.tabs-button:active,.tabs-button:checked,.tabs-button.selected{background-color:var(--color-bg-odd);border:1px solid var(--color-fg-primary);border-radius:5px}.inspector-info-page{font-size:14px;grid-column-gap:8px;grid-row-gap:8px;grid-template-columns:auto 1fr;margin:20px;padding:12px}.inspector-info-page:not(.hidden){display:grid}.inspector-info-page .section-label{font-size:16px;font-weight:700;grid-column:span 2;padding-bottom:5px}.inspector-info-page .section-label:not(:first-of-type){margin-top:20px}.inspector-info-page label{font-weight:500}.inspector-info-page :not(.section-label){overflow-x:hidden;text-overflow:ellipsis}.inspector-info-magnet button{background-color:var(--color-fg-primary);background-position:top;background-repeat:no-repeat;border:0;cursor:pointer;height:1rem;-webkit-mask:var(--image-magnet) no-repeat center/14px;mask:var(--image-magnet) no-repeat center/14px;vertical-align:middle;width:1rem}#inspector .tabs-button,#prefs-dialog .tabs-button{height:30px;margin:0;min-width:40px}#inspector-file-list{margin:0;padding:0}#inspector-file-list .inspector-torrent-file-list-entry{display:grid;grid-column-gap:5px;grid-template-areas:"check name priority" "blank1 info blank2";grid-template-columns:20px 1fr 65px;margin-bottom:4px;padding:5px}#inspector-file-list .inspector-torrent-file-list-entry:nth-child(2n){background-color:var(--color-bg-even)}#inspector-file-list .inspector-torrent-file-list-entry:nth-child(odd){background-color:var(--color-bg-odd)}#inspector-file-list .inspector-torrent-file-list-entry.skip{opacity:.5}#inspector-file-list .file-wanted-control{grid-area:check}#inspector-file-list .inspector-torrent-file-list-entry-name{color:var(--color-fg-primary);cursor:pointer;font-size:14px;grid-area:name;overflow-wrap:anywhere}#inspector-file-list .inspector-torrent-file-list-entry.skip>.inspector-torrent-file-list-entry-name{color:var(--color-fg-disabled)}#inspector-file-list .inspector-torrent-file-list-entry-progress{color:var(--color-fg-secondary);font-size:12px;grid-area:info}#inspector-file-list .single-file .inspector-torrent-file-list-entry>.file-wanted-control,#inspector-file-list .inspector-torrent-file-list-entry.complete>.file-wanted-control{cursor:default}#inspector-header{margin:8px 0}#torrent-inspector-name{font-size:large;font-weight:700}#inspector-tiers-list{color:var(--color-fg-primary);margin:0 10px;padding:0}#inspector-tiers-list .tier-list-row{display:grid;font-size:12px;grid-column-gap:8px;grid-row-gap:4px;padding:8px 12px}#inspector-tiers-list .tier-list-row:nth-child(2n of.tier-list-row){background-color:var(--color-bg-even)}#inspector-tiers-list .tier-list-row:nth-child(odd of.tier-list-row){background-color:var(--color-bg-odd)}#inspector-tiers-list .tier-list-torrent{color:var(--color-fg-primary);font-weight:bolder;overflow-x:hidden;padding-top:12px;padding-bottom:8px;text-overflow:ellipsis;white-space:nowrap}#inspector-tiers-list .tier-list-tracker{font-size:14px;font-weight:bolder;grid-column:span 2;padding-bottom:4px}#inspector-tiers-list .tier-announce,#inspector-tiers-list .tier-scrape,#inspector-tiers-list .tier-state{text-align:left}#inspector-tiers-list .tier-downloads,#inspector-tiers-list .tier-leechers,#inspector-tiers-list .tier-seeders{text-align:right}.peer-list{--table-border: 1px solid var(--color-border-default);border:var(--table-border);border-collapse:collapse;cursor:default;table-layout:fixed;text-align:left;width:100%}.peer-list td,.peer-list th{font-size:smaller;padding:5px}.peer-list td{border:var(--table-border);color:var(--color-fg-secondary)}.peer-list .torrent-row td{background:var(--color-bg-odd);color:var(--color-fg-primary);font-weight:bolder;overflow-x:hidden;padding:10px;text-overflow:ellipsis;white-space:nowrap}.peer-list .encryption[data-encrypted=true]{background-color:var(--color-border-starkest);-webkit-mask:var(--image-lock-fill) no-repeat center/14px;mask:var(--image-lock-fill) no-repeat center/14px;width:10px}.peer-list .peer-address,.peer-list .percent-done,.peer-list .speed-down,.peer-list .speed-up{text-align:right}.peer-list .percent-done{width:10%}@media (width < 600px){.peer-list .percent-done{width:12%}}.peer-list .speed-down,.peer-list .speed-up{width:15%}.peer-list .peer-address{width:25%;overflow-x:hidden;text-overflow:ellipsis}@media (width < 600px){.peer-list .peer-address{text-align:left;width:20%}}.peer-list .peer-app-name{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media (width >= 600px){.peer-list .peer-app-name{width:20%}}.peer-list .status{cursor:pointer;width:10%}.file-priority-radiobox{grid-area:priority}.file-priority-radiobox>*{appearance:none;background-color:var(--color-border-starkest);background-position:center;background-repeat:no-repeat;background-size:10px,20px;border:1px solid var(--color-border-stark);border-radius:0;height:20px;margin:0;padding:0;width:20px}.file-priority-radiobox>.low{background-image:var(--image-chevron-dn);border-right-width:0}.file-priority-radiobox>.normal{background-image:var(--image-baseline)}.file-priority-radiobox>.high{background-image:var(--image-chevron-up);border-left-width:0}.file-priority-radiobox>.checked{background-color:var(--color-bg-hover)}.context-menu{background-color:var(--color-bg-primary);border-radius:5px;color:var(--color-fg-on-popup);padding:10px 5px;z-index:9999;user-select:none;-webkit-user-select:none}.context-menu .context-menuitem{font-size:13px;font-weight:400;list-style:none;padding:5px 15px}.context-menu .context-menuitem:hover:not(:disabled),.context-menu .context-menuitem:focus:not(:disabled){background-color:var(--color-bg-hover);border-radius:6px;cursor:pointer;font-weight:500}.context-menu .context-menuitem:disabled{color:var(--color-fg-disabled);cursor:none}.context-menu .context-menuitem.warning:hover{background-color:var(--color-bg-warn);color:var(--color-fg-warn)}.context-menu-separator{border-bottom:1px solid var(--color-fg-secondary);margin-bottom:10px;padding-bottom:10px}.overflow-menu{background:var(--color-bg-popup);border-radius:5px;color:var(--color-fg-on-popup);overflow:auto;padding:10px;right:0;margin:6px;top:50px;z-index:var(--z-index-popup)}@media (width < 600px){.overflow-menu{height:80vh}}.overflow-menu fieldset{border:0;display:block;margin:8px 0}.overflow-menu fieldset ul{margin:0;padding-left:0}.overflow-menu fieldset ul li{list-style-type:none}.overflow-menu fieldset ul a{cursor:pointer}.overflow-menu .table-row{align-items:center;border-radius:6px;display:flex;flex-direction:row;padding:3px 0}.overflow-menu legend{color:var(--color-fg-primary);font-weight:bolder;margin:12px 0 4px}.overflow-menu button,.overflow-menu label{color:var(--color-fg-primary);display:inline-flex;font-size:1em;width:100%}.overflow-menu button{background:transparent;border:0;cursor:pointer;display:block;padding:4px 0;text-align:left;text-decoration:none;width:150px}.overflow-menu .input-and-label{align-items:center;display:inline-flex;flex-direction:row}.overflow-menu #display-options,.overflow-menu #speed-options{display:flex;flex-direction:column}.overflow-menu #speed-options>.speed-up,.overflow-menu #speed-options>.speed-down{align-items:center;display:flex;flex-direction:row;padding:4px 0}.overflow-menu #speed-options>.speed-up>label,.overflow-menu #speed-options>.speed-down>label{overflow:hidden;width:80px}.overflow-menu #speed-options .alt-speed{display:grid;grid-column-gap:5px;grid-row-gap:5px;grid-template-areas:"check lb" "turtle values";grid-template-columns:22px 1fr;margin-bottom:4px}.overflow-menu #speed-options #alt-speed-check{grid-area:check}.overflow-menu #speed-options #alt-speed-check:checked~#alt-speed-image{background-image:var(--image-alt-speed-enabled);background-position:left;background-size:22px}.overflow-menu #speed-options #alt-speed-check:not(:checked)~#alt-speed-image{background-image:var(--image-alt-speed-disabled);background-size:22px}.overflow-menu #speed-options #alt-speed-image{background-position:center;background-repeat:no-repeat;grid-area:turtle}.overflow-menu #speed-options #alt-speed-label{grid-area:lb}.overflow-menu #speed-options #alt-speed-values-label{font-size:small;grid-area:values}@media (width < 600px){.dialog-buttons{padding-top:var(--dialog-logo-padding)}.dialog-container{opacity:96%;position:absolute;top:var(--popup-top);width:100%}.dialog-logo{padding-bottom:var(--dialog-logo-padding)}.dialog-window{align-items:center;display:flex;flex-direction:column}}@media (width >= 600px){.dialog-container{min-width:500px;position:absolute;top:calc(var(--popup-top) * 2)}.dialog-heading{grid-area:heading}.dialog-logo{grid-area:icon;padding-right:var(--dialog-logo-padding)}.dialog-window{background-color:var(--color-bg-popup);color:var(--color-fg-on-popup);display:grid;grid-column-gap:12px;grid-template-areas:"icon heading" "icon message" "icon workarea" "icon buttons";grid-template-columns:var(--logo-size) 1fr;padding:2px 12px}}.dialog-buttons{display:flex;float:right;grid-area:buttons;margin:10px 0 0;text-align:center}.dialog-buttons button{appearance:none;background:var(--color-bg-primary);border:1px solid var(--color-border-default);border-radius:5px;color:var(--color-fg-primary);margin-left:8px;padding:8px;text-decoration:none}.dialog-buttons-begin{flex-grow:1}.dialog-buttons-end{display:none}dialog{border:0}.dialog-container{color:var(--color-fg-primary);display:block;padding:0;z-index:var(--z-index-popup)}@media (width >= 600px){.dialog-container{border:0;border-radius:8px;max-width:50%}}.dialog-heading{align-items:center;display:flex;font-size:1.2em;font-weight:700;overflow-wrap:anywhere}.dialog-logo{background:transparent url(data:image/png;base64,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) top left no-repeat;height:var(--logo-size);width:var(--logo-size)}.dialog-message{grid-area:message;margin:10px 0 0}.dialog-window{background:var(--color-bg-primary);border-radius:8px;padding:var(--dialog-padding)}.dialog-workarea{display:flex;flex-direction:column;grid-area:workarea;margin:10px 0 0}.dialog-workarea>*{margin-bottom:5px}.about-dialog{max-width:initial}.about-dialog .dialog-workarea>*{margin-bottom:10px}.about-dialog-version-number{margin-left:4px}.about-dialog-version-checksum{font-size:small;font-style:italic;font-weight:400;margin-left:auto;padding-left:10px}.open-torrent input{margin-bottom:15px}.open-torrent input[type=file]{width:100%;box-sizing:border-box}.open-torrent #auto-start-label{margin-left:5px}.shortcuts-dialog table{border-collapse:collapse;width:100%}.shortcuts-dialog th,.shortcuts-dialog td{border:1px solid var(--color-border-stark);padding:5px 10px}#torrent-rename-name,#move-container #torrent-path{min-width:400px}.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{column-gap:16px;display:grid;grid-row-gap:6px;grid-template-columns:auto 1fr;margin-top:4px}@media (width < 600px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 0 16px}}@media (width >= 600px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 16px 16px}}.tabs-pages .content div,.inspector-info-page .content div,.statistics-dialog .content div{word-break:break-word}.tabs-pages fieldset,.inspector-info-page fieldset,.statistics-dialog fieldset{border:0;margin:0;padding:0}.tabs-pages legend,.inspector-info-page legend,.statistics-dialog legend{font-weight:bolder;margin-bottom:4px}.tabs-pages span,.inspector-info-page span,.statistics-dialog span{overflow-wrap:anywhere}#free-space-text{display:inline-block;font-size:smaller;font-style:italic}.upload-div{display:none} -/*# sourceMappingURL=transmission-app.css.map */ diff --git a/public_html/transmission-app.js b/public_html/transmission-app.js deleted file mode 100644 index 346048d..0000000 --- a/public_html/transmission-app.js +++ /dev/null @@ -1,4 +0,0 @@ -(()=>{var St=Object.create;var tt=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var Vt=Object.getOwnPropertyNames;var Dt=Object.getPrototypeOf,_t=Object.prototype.hasOwnProperty;var Et=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports);var zt=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Vt(e))!_t.call(o,s)&&s!==t&&tt(o,s,{get:()=>e[s],enumerable:!(r=Nt(e,s))||r.enumerable});return o};var jt=(o,e,t)=>(t=o!=null?St(Dt(o)):{},zt(e||!o||!o.__esModule?tt(t,"default",{value:o,enumerable:!0}):t,o));var kt=Et((q,M)=>{var Mt=200,Pe="__lodash_hash_undefined__",Ie=1,ut=2,bt=9007199254740991,de="[object Arguments]",Ve="[object Array]",Pt="[object AsyncFunction]",mt="[object Boolean]",ht="[object Date]",It="[object Error]",yt="[object Function]",Kt="[object GeneratorFunction]",ge="[object Map]",Ct="[object Number]",$t="[object Null]",j="[object Object]",rt="[object Promise]",qt="[object Proxy]",xt="[object RegExp]",pe="[object Set]",Xt="[object String]",er="[object Symbol]",tr="[object Undefined]",De="[object WeakMap]",ft="[object ArrayBuffer]",ue="[object DataView]",rr="[object Float32Array]",or="[object Float64Array]",sr="[object Int8Array]",nr="[object Int16Array]",ir="[object Int32Array]",cr="[object Uint8Array]",ar="[object Uint8ClampedArray]",lr="[object Uint16Array]",dr="[object Uint32Array]",gr=/[\\^$.*+?()[\]{}|]/g,pr=/^\[object .+?Constructor\]$/,ur=/^(?:0|[1-9]\d*)$/,B={};B[rr]=B[or]=B[sr]=B[nr]=B[ir]=B[cr]=B[ar]=B[lr]=B[dr]=!0;B[de]=B[Ve]=B[ft]=B[mt]=B[ue]=B[ht]=B[It]=B[yt]=B[ge]=B[Ct]=B[j]=B[xt]=B[pe]=B[Xt]=B[De]=!1;var At=typeof global=="object"&&global&&global.Object===Object&&global,br=typeof self=="object"&&self&&self.Object===Object&&self,O=At||br||Function("return this")(),Gt=typeof q=="object"&&q&&!q.nodeType&&q,ot=Gt&&typeof M=="object"&&M&&!M.nodeType&&M,vt=ot&&ot.exports===Gt,Ye=vt&&At.process,st=function(){try{return Ye&&Ye.binding&&Ye.binding("util")}catch{}}(),nt=st&&st.isTypedArray;function mr(o,e){for(var t=-1,r=o==null?0:o.length,s=0,n=[];++t-1}function _r(o,e){var t=this.__data__,r=Ce(t,o);return r<0?(++this.size,t.push([o,e])):t[r][1]=e,this}T.prototype.clear=Sr;T.prototype.delete=Nr;T.prototype.get=Vr;T.prototype.has=Dr;T.prototype.set=_r;function D(o){var e=-1,t=o==null?0:o.length;for(this.clear();++ei))return!1;var a=n.get(o);if(a&&n.get(e))return a==e;var p=-1,g=!0,d=t&ut?new me:void 0;for(n.set(o,e),n.set(e,o);++p-1&&o%1==0&&o-1&&o%1==0&&o<=bt}function Qt(o){var e=typeof o;return o!=null&&(e=="object"||e=="function")}function re(o){return o!=null&&typeof o=="object"}var Ut=nt?Cr(nt):ao;function Ao(o){return Xo(o)?so(o):lo(o)}function Go(){return[]}function vo(){return!1}M.exports=fo});var le=class o extends EventTarget{constructor(){super(),this.actions=Object.seal({"deselect-all":{enabled:!1,shortcut:"D",text:"Deselect all"},"move-bottom":{enabled:!1,text:"Move to the back of the queue"},"move-down":{enabled:!1,text:"Move down in the queue"},"move-top":{enabled:!1,text:"Move to the front of the queue"},"move-up":{enabled:!1,text:"Move up in the queue"},"open-torrent":{enabled:!0,shortcut:"O",text:"Open torrent\u2026"},"pause-all-torrents":{enabled:!1,text:"Pause all"},"pause-selected-torrents":{enabled:!1,shortcut:"U",text:"Pause"},"reannounce-selected-torrents":{enabled:!1,text:"Ask tracker for more peers"},"remove-selected-torrents":{enabled:!1,text:"Remove from list\u2026"},"resume-selected-torrents":{enabled:!1,shortcut:"R",text:"Resume"},"resume-selected-torrents-now":{enabled:!1,text:"Resume now"},"select-all":{enabled:!1,shortcut:"A",text:"Select all"},"show-about-dialog":{enabled:!0,text:"About"},"show-inspector":{enabled:!1,shortcut:"I",text:"Torrent Inspector"},"show-labels-dialog":{enabled:!1,shortcut:"K",text:"Edit Labels\u2026"},"show-move-dialog":{enabled:!1,shortcut:"L",text:"Set location\u2026"},"show-overflow-menu":{enabled:!0,text:"More options\u2026"},"show-preferences-dialog":{enabled:!0,shortcut:"P",text:"Edit preferences"},"show-rename-dialog":{enabled:!1,shortcut:"N",text:"Rename\u2026"},"show-shortcuts-dialog":{enabled:!0,text:"Keyboard shortcuts"},"show-statistics-dialog":{enabled:!0,shortcut:"S",text:"Statistics"},"start-all-torrents":{enabled:!1,text:"Start all"},"toggle-compact-rows":{enabled:!0,text:"Compact rows"},"toggle-contrast":{enabled:!0,text:"High contrast UI"},"trash-selected-torrents":{enabled:!1,text:"Trash data and remove from list\u2026"},"verify-selected-torrents":{enabled:!1,shortcut:"V",text:"Verify local data"},"verify-selected-torrents-force":{enabled:!1,text:"Verify local data (force)"}})}click(e){if(this.isEnabled(e)){let t=new Event("click");t.action=e,this.dispatchEvent(t)}}getActionForShortcut(e){for(let[t,r]of Object.entries(this.actions))if(e===r.shortcut)return t;return null}allShortcuts(){return new Map(Object.entries(this.actions).filter(([,e])=>e.shortcut).map(([e,t])=>[t.shortcut,e]))}isEnabled(e){return this._getAction(e).enabled}text(e){return this._getAction(e).text}keyshortcuts(e){return this._getAction(e).shortcut}update(e){let t=o._recount(e.selected,e.nonselected);this._updateStates(t)}_getAction(e){let t=this.actions[e];if(!t)throw new Error(`no such action: ${e}`);return t}static _recount(e,t){let r=e.length+t.length,s=e.filter(g=>g.isStopped()).length,n=e.length-s,c=t.filter(g=>g.isStopped()).length,i=t.length-c,l=s+c,a=n+i,p=e.filter(g=>g.isQueued()).length;return{active:a,nonselected_active:i,nonselected_paused:c,paused:l,selected:e.length,selected_active:n,selected_paused:s,selected_queued:p,total:r}}_updateStates(e){let t=(r,s)=>{for(let n of s)this._updateActionState(n,r)};t(e.selected_paused>0,["resume-selected-torrents"]),t(e.paused>0,["start-all-torrents"]),t(e.active>0,["pause-all-torrents"]),t(e.selected_paused>0||e.selected_queued>0,["resume-selected-torrents-now"]),t(e.selected_active>0,["pause-selected-torrents","reannounce-selected-torrents"]),t(e.selected>0,["deselect-all","move-bottom","move-down","move-top","move-up","remove-selected-torrents","show-inspector","show-labels-dialog","show-move-dialog","trash-selected-torrents","verify-selected-torrents","verify-selected-torrents-force"]),t(e.selected===1,["show-rename-dialog"]),t(e.selectedBo(s,g,c,a,t))}return i[0].classList.add("selected"),c.children[0].classList.remove("hidden"),{buttons:i,dismiss:n,root:r}}function J(o){let e=document.createElement("dialog");e.classList.add("dialog-container","popup",o),e.open=!0,e.setAttribute("role","dialog");let t=document.createElement("div");t.classList.add("dialog-window"),e.append(t);let r=document.createElement("div");r.classList.add("dialog-logo"),t.append(r);let s=document.createElement("div");s.classList.add("dialog-heading"),t.append(s);let n=document.createElement("div");n.classList.add("dialog-message"),t.append(n);let c=document.createElement("div");c.classList.add("dialog-workarea"),t.append(c);let i=document.createElement("div");i.classList.add("dialog-buttons"),t.append(i);let l=document.createElement("span");l.classList.add("dialog-buttons-begin"),i.append(l);let a=document.createElement("button");a.classList.add("dialog-dismiss-button"),a.textContent="Cancel",i.append(a);let p=document.createElement("button");p.textContent="OK",i.append(p);let g=document.createElement("span");return g.classList.add("dialog-buttons-end"),i.append(g),{confirm:p,dismiss:a,heading:s,message:n,root:e,workarea:c}}function F(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():("10000000-1000-4000-8000"+-1e11).replaceAll(/[018]/g,o=>(o^crypto.getRandomValues(new Uint8Array(1))[0]&15>>o/4).toString(16))}function Zo(o){let e=document.createElement("fieldset");e.classList.add("section");let t=document.createElement("legend");t.classList.add("title"),t.textContent=o,e.append(t);let r=document.createElement("div");return r.classList.add("content"),e.append(r),{content:r,root:e}}function Ke(o,e){let t=[],{root:r,content:s}=Zo(o);for(let n of e){let c=document.createElement("label");c.textContent=n,s.append(c);let i=document.createElement("div");i.id=F(),s.append(i),c.setAttribute("for",i.id),t.push(i)}return{children:t,root:r}}function E(o,e=100){let t=null;return(...r)=>{t||(t=setTimeout(()=>{t=null,o(...r)},e))}}function fe(o,e){return(0,Ot.default)(o,e)}function Fo(o,e,t){t?o.setAttribute(e,!0):o.removeAttribute(e)}function H(o,e){Fo(o,"disabled",!e)}function Ae(o,e){o.classList.toggle("checked",e)}var K=class extends EventTarget{constructor(e){super(),this.listener=t=>{e.contains(t.target)||(this.dispatchEvent(new MouseEvent(t.type,t)),t.preventDefault())},Object.seal(this),this.start()}start(){setTimeout(()=>document.addEventListener("click",this.listener),0)}stop(){document.removeEventListener("click",this.listener)}};function h(o,e){o.textContent!==e&&(o.textContent=e)}var Ge=class{constructor(e){this._prefs=e,this._elements={toggle:document.querySelector("#toggle-notifications")}}_setEnabled(e){this.prefs.notifications_enabled=e,h(this._toggle,`${e?"Disable":"Enable"} Notifications`)}_requestPermission(){Notification.requestPermission().then(e=>this._setEnabled(e==="granted"))}toggle(){this._enabled?this._setEnabled(!1):Notification.permission==="granted"?this._setEnabled(!0):Notification.permission!=="denied"&&this._requestPermission()}};var b=class o extends EventTarget{constructor(){super(),this._cache={},this.dispatchPrefsChange=E((e,t,r)=>{let s=new Event("change");Object.assign(s,{key:e,old_value:t,value:r}),this.dispatchEvent(s)});for(let[e,t]of Object.entries(o._Defaults))this._set(e,o._getCookie(e,t)),Object.defineProperty(this,e.replaceAll("-","_"),{get:()=>this._get(e),set:r=>{this._set(e,r)}});Object.seal(this)}entries(){return Object.entries(this._cache)}keys(){return Object.keys(this._cache)}_get(e){let{_cache:t}=this;if(!Object.prototype.hasOwnProperty.call(t,e))throw new Error(e);return t[e]}_set(e,t){let{_cache:r}=this,s=r[e];s!==t&&(r[e]=t,o._setCookie(e,t),this.dispatchPrefsChange(e,s,t))}static _setCookie(e,t){let r=new Date;r.setFullYear(r.getFullYear()+1),document.cookie=`${e}=${t}; SameSite=Strict; expires=${r.toGMTString()}`}static _getCookie(e,t){let r=o._readCookie(e);return r===null?t:r==="true"?!0:r==="false"?!1:/^\d+$/.test(r)?Number.parseInt(r,10):r}static _readCookie(e){let r=`; ${document.cookie}`.split(`; ${e}=`);return r.length===2?r.pop().split(";").shift():null}};b.AltSpeedEnabled="alt-speed-enabled";b.DisplayCompact="compact";b.DisplayFull="full";b.DisplayMode="display-mode";b.ContrastLess="less";b.ContrastMore="more";b.ContrastMode="contrast-mode";b.FilterActive="active";b.FilterAll="all";b.FilterDownloading="downloading";b.FilterFinished="finished";b.FilterMode="filter-mode";b.FilterPaused="paused";b.FilterSeeding="seeding";b.NotificationsEnabled="notifications-enabled";b.RefreshRate="refresh-rate-sec";b.SortAscending="ascending";b.SortByActivity="activity";b.SortByAge="age";b.SortByName="name";b.SortByProgress="progress";b.SortByQueue="queue";b.SortByRatio="ratio";b.SortBySize="size";b.SortByState="state";b.SortDescending="descending";b.SortDirection="sort-direction";b.SortMode="sort-mode";b._Defaults={[b.AltSpeedEnabled]:!1,[b.DisplayMode]:b.DisplayFull,[b.ContrastMode]:window.matchMedia("(prefers-contrast: more)").matches?b.ContrastMore:b.ContrastLess,[b.FilterMode]:b.FilterAll,[b.NotificationsEnabled]:!1,[b.RefreshRate]:5,[b.SortDirection]:b.SortAscending,[b.SortMode]:b.SortByName};var ve=class o extends EventTarget{constructor(e){super(),this.elements=o._create(e),this.elements.dismiss.addEventListener("click",()=>this.close()),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}static _create(e){let t=J("about-dialog");t.root.setAttribute("aria-label","About transmission"),t.heading.textContent="Transmission",t.dismiss.textContent="Close";let r=document.createElement("div");return r.classList.add("about-dialog-version-number"),r.textContent=e.version,t.heading.append(r),r=document.createElement("div"),r.classList.add("about-dialog-version-checksum"),r.textContent=e.checksum,t.heading.append(r),r=document.createElement("div"),r.textContent="A fast and easy bitTorrent client",t.workarea.append(r),r=document.createElement("div"),r.textContent="Copyright \xA9 The Transmission Project",t.workarea.append(r),r=document.createElement("a"),r.href="https://transmissionbt.com/",r.target="_blank",r.textContent="https://transmissionbt.com/",t.workarea.append(r),t.confirm.remove(),delete t.confirm,t}};var Be=class extends EventTarget{constructor(e){super(),this.action_listener=this._update.bind(this),this.action_manager=e,this.action_manager.addEventListener("change",this.action_listener),Object.assign(this,this._create()),this.show()}show(){for(let[e,t]of Object.entries(this.actions))H(t,this.action_manager.isEnabled(e));document.body.append(this.root)}close(){if(!this.closed){this.action_manager.removeEventListener("change",this.action_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))delete this[e];this.closed=!0}}_update(e){let t=this.actions[e.action];t&&H(t,e.enabled)}_create(){let e=document.createElement("div");e.role="menu",e.classList.add("context-menu","popup"),e.addEventListener("contextmenu",n=>{n.preventDefault()}),e.style.pointerEvents="none";let t={},r=(n,c=!1)=>{let i=document.createElement("div"),l=this.action_manager.text(n);i.role="menuitem",c?i.classList.add("context-menuitem","warning"):i.classList.add("context-menuitem"),i.dataset.action=n,i.textContent=l;let a=this.action_manager.keyshortcuts(n);a&&i.setAttribute("aria-keyshortcuts",a),i.addEventListener("click",()=>{this.action_manager.click(n),this.close()}),t[n]=i,e.append(i)},s=()=>{let n=document.createElement("div");n.classList.add("context-menu-separator"),e.append(n)};return r("resume-selected-torrents"),r("resume-selected-torrents-now"),r("pause-selected-torrents"),s(),r("move-top"),r("move-up"),r("move-down"),r("move-bottom"),s(),r("remove-selected-torrents",!0),r("trash-selected-torrents",!0),s(),r("verify-selected-torrents"),r("show-move-dialog"),r("show-rename-dialog"),r("show-labels-dialog"),s(),r("reannounce-selected-torrents"),s(),r("select-all"),r("deselect-all"),{actions:t,root:e}}};var Tt=new Intl.PluralRules,R=Tt.resolvedOptions().locale,Jo=new Intl.NumberFormat(R),$e=1e3,Wo=[new Intl.NumberFormat(R,{maximumFractionDigits:0,style:"unit",unit:"byte"}),new Intl.NumberFormat(R,{maximumFractionDigits:0,style:"unit",unit:"kilobyte"}),new Intl.NumberFormat(R,{maximumFractionDigits:0,style:"unit",unit:"megabyte"}),new Intl.NumberFormat(R,{maximumFractionDigits:2,style:"unit",unit:"gigabyte"}),new Intl.NumberFormat(R,{maximumFractionDigits:2,style:"unit",unit:"terabyte"}),new Intl.NumberFormat(R,{maximumFractionDigits:2,style:"unit",unit:"petabyte"})],wo=new Intl.NumberFormat(R,{maximumFractionDigits:2,style:"unit",unit:"kilobyte-per-second"}),Lo=new Intl.NumberFormat(R,{maximumFractionDigits:2,style:"unit",unit:"megabyte-per-second"}),X={_toTruncFixed(o,e){return(Math.floor(o*10**e)/10**e).toFixed(e)},countString(o,e,t){return`${this.number(t)} ${this.ngettext(o,e,t)}`},mem(o){if(o<0)return"Unknown";if(o===0)return"None";let e=o;for(let t of Wo){if(e<$e)return t.format(e);e/=$e}return"E2BIG"},ngettext(o,e,t){return Tt.select(t)==="one"?o:e},number(o){return Jo.format(o)},percentString(o,e){return e=o<100?e:0,this._toTruncFixed(o,e)},ratioString(o){return o===-1?"None":o===-2?"∞":this.percentString(o,1)},size(o){return this.mem(o)},speed(o){return o<999.95?wo.format(o):Lo.format(o/1e3)},speedBps(o){return this.speed(this.toKBps(o))},stringSanitizer(o){return["E2BIG","NaN"].some(e=>o.includes(e))?"\u2026":o},timeInterval(o,e=3){let t=Math.floor(o/86400),r=[];t&&r.push(this.countString("day","days",t));let s=Math.floor(o%86400/3600);(t||s)&&r.push(this.countString("hour","hours",s));let n=Math.floor(o%3600/60);return t||s||n?(r.push(this.countString("minute","minutes",n)),r=r.slice(0,e),r.length>1?`${r.slice(0,-1).join(", ")} and ${r.slice(-1)}`:r[0]):this.countString("second","seconds",Math.floor(o%60))},timestamp(o){if(!o)return"N/A";let e=new Date(o*1e3),t=new Date,r="",s="",n=t.getFullYear()===e.getFullYear(),c=t.getMonth()===e.getMonth(),i=t.getDate()-e.getDate();n&&c&&Math.abs(i)<=1?i===0?r="Today":i===1?r="Yesterday":r="Tomorrow":r=e.toDateString();let l=e.getHours(),a="AM";l>12&&(l=l-12,a="PM"),l===0&&(l=12),l<10&&(l=`0${l}`);let p=e.getMinutes();return p<10&&(p=`0${p}`),o=e.getSeconds(),o<10&&(o=`0${o}`),s=[l,p,o].join(":"),[r,s,a].join(" ")},toKBps(o){return Math.floor(o/$e)}};var Ze=class extends EventTarget{isDone(){return this.fields.have>=this.fields.size}isEditable(){return this.fields.torrent.getFileCount()>1&&!this.isDone()}refreshWantedHTML(){let e=this.elements.root;e.classList.toggle("skip",!this.fields.isWanted),e.classList.toggle("complete",this.isDone()),H(e.checkbox,this.isEditable()),e.checkbox.checked=this.fields.isWanted}refreshProgressHTML(){let{size:e,have:t}=this.fields,r=100*(e?t/e:1),s=X,n=`${s.size(t)} of ${s.size(e)} (${s.percentString(r,1)}%)`;h(this.elements.progress,n)}refresh(){let e=0,t=!1,r=!1,s=!1,n=0,c=!1,i=this.fields.torrent.getFiles();for(let l of this.fields.indices){let a=i[l];switch(e+=a.bytesCompleted,n+=a.length,c|=a.wanted,a.priority.toString()){case"-1":r=!0;break;case"1":t=!0;break;default:s=!0;break}}Ae(this.elements.priority_low_button,r),Ae(this.elements.priority_normal_button,s),Ae(this.elements.priority_high_button,t),(this.fields.have!==e||this.fields.size!==n)&&(this.fields.have=e,this.fields.size=n,this.refreshProgressHTML()),this.fields.isWanted!==c&&(this.fields.isWanted=c,this.refreshWantedHTML())}fireWantedChanged(e){let t=new Event("wantedToggled");t.indices=[...this.fields.indices],t.wanted=e,this.dispatchEvent(t)}firePriorityChanged(e){let t=new Event("priorityToggled");t.indices=[...this.fields.indices],t.priority=e,this.dispatchEvent(t)}createRow(e,t,r){let s=document.createElement("li");s.classList.add("inspector-torrent-file-list-entry"),this.elements.root=s;let n=document.createElement("input"),c=F();n.type="checkbox",n.className="file-wanted-control",n.title="Download file",n.id=c,n.addEventListener("change",a=>this.fireWantedChanged(a.target.checked)),s.checkbox=n,s.append(n),n=document.createElement("label"),n.className="inspector-torrent-file-list-entry-name",n.setAttribute("for",c),h(n,r),s.append(n),n=document.createElement("div"),n.className="inspector-torrent-file-list-entry-progress",s.append(n),this.elements.progress=n,n=document.createElement("div"),n.className="file-priority-radiobox";let i=n,l=a=>this.firePriorityChanged(a.target.value);n=document.createElement("input"),n.type="radio",n.value="-1",n.className="low",n.title="Low Priority",n.addEventListener("click",l),this.elements.priority_low_button=n,i.append(n),n=document.createElement("input"),n.type="radio",n.value="0",n.className="normal",n.title="Normal Priority",n.addEventListener("click",l),this.elements.priority_normal_button=n,i.append(n),n=document.createElement("input"),n.type="radio",n.value="1",n.title="High Priority",n.className="high",n.addEventListener("click",l),this.elements.priority_high_button=n,i.append(n),s.append(i),s.style.paddingLeft=`${t*20}px`,this.refresh()}getElement(){return this.elements.root}constructor(e,t,r,s){super(),this.fields={have:0,indices:s,isWanted:!0,size:0,torrent:e},this.elements={priority_high_button:null,priority_low_button:null,priority_normal_button:null,progress:null,root:null},this.createRow(e,t,r)}};var C=class o extends EventTarget{constructor(e){super(),this.fieldObservers={},this.fields={},this.refresh(e)}notifyOnFieldChange(e,t){this.fieldObservers[e]=this.fieldObservers[e]||[],this.fieldObservers[e].push(t)}setField(e,t,r){let s=e[t];if(fe(s,r))return!1;let n=this.fieldObservers[t];if(e===this.fields&&n&&n.length>0)for(let c of n)c.call(this,r,s,t);return e[t]=r,!0}updateFiles(e){let t=!1,r=this.fields.files||[],s=["length","name","bytesCompleted","wanted","priority"];for(let[n,c]of e.entries()){let i=r[n]||{};for(let l of s)l in c&&(t|=this.setField(i,l,c[l]));r[n]=i}return this.fields.files=r,t}static collateTrackers(e){return e.map(t=>t.announce.toLowerCase()).join(" ")}refreshFields(e){let t=!1;for(let[r,s]of Object.entries(e))switch(r){case"files":case"fileStats":t|=this.updateFiles(s);break;case"trackerStats":t|=this.setField(this.fields,"trackers",s);break;case"trackers":r in this.fields||(t|=this.setField(this.fields,r,s));break;case"name":this.setField(this.fields,r,e[r])&&(this.fields.collatedName="",t=!0);break;default:t|=this.setField(this.fields,r,s)}return t}refresh(e){this.refreshFields(e)&&this.dispatchEvent(new Event("dataChanged"))}getComment(){return this.fields.comment}getCreator(){return this.fields.creator}getDateAdded(){return this.fields.addedDate}getDateCreated(){return this.fields.dateCreated}getDesiredAvailable(){return this.fields.desiredAvailable}getDownloadDir(){return this.fields.downloadDir}getDownloadSpeed(){return this.fields.rateDownload}getDownloadedEver(){return this.fields.downloadedEver}getError(){return this.fields.error}getErrorString(){return this.fields.errorString}getETA(){return this.fields.eta}getFailedEver(){return this.fields.corruptEver}getFiles(){return this.fields.files||[]}getFile(e){return this.fields.files[e]}getFileCount(){return this.fields["file-count"]}getHashString(){return this.fields.hashString}getHave(){return this.getHaveValid()+this.getHaveUnchecked()}getHaveUnchecked(){return this.fields.haveUnchecked}getHaveValid(){return this.fields.haveValid}getId(){return this.fields.id}getLabels(){return this.fields.labels.sort()}getLastActivity(){return this.fields.activityDate}getLeftUntilDone(){return this.fields.leftUntilDone}getMagnetLink(){return this.fields.magnetLink}getMetadataPercentComplete(){return this.fields.metadataPercentComplete}getName(){return this.fields.name||"Unknown"}getPeers(){return this.fields.peers||[]}getPeersConnected(){return this.fields.peersConnected}getPeersGettingFromUs(){return this.fields.peersGettingFromUs}getPeersSendingToUs(){return this.fields.peersSendingToUs}getPieceCount(){return this.fields.pieceCount}getPieceSize(){return this.fields.pieceSize}getPrimaryMimeType(){return this.fields["primary-mime-type"]||"application/octet-stream"}getPrivateFlag(){return this.fields.isPrivate}getQueuePosition(){return this.fields.queuePosition}getRecheckProgress(){return this.fields.recheckProgress}getSeedRatioLimit(){return this.fields.seedRatioLimit}getSeedRatioMode(){return this.fields.seedRatioMode}getSizeWhenDone(){return this.fields.sizeWhenDone}getStartDate(){return this.fields.startDate}getStatus(){return this.fields.status}getTotalSize(){return this.fields.totalSize}getTrackers(){return this.fields.trackers||[]}getUploadSpeed(){return this.fields.rateUpload}getUploadRatio(){return this.fields.uploadRatio}getUploadedEver(){return this.fields.uploadedEver}getWebseedsSendingToUs(){return this.fields.webseedsSendingToUs}isFinished(){return this.fields.isFinished}hasExtraInfo(){return"hashString"in this.fields}isSeeding(){return this.getStatus()===o._StatusSeed}isStopped(){return this.getStatus()===o._StatusStopped}isChecking(){return this.getStatus()===o._StatusCheck}isDownloading(){return this.getStatus()===o._StatusDownload}isQueued(){return this.getStatus()===o._StatusDownloadWait||this.getStatus()===o._StatusSeedWait}isDone(){return this.getLeftUntilDone()<1}needsMetaData(){return this.getMetadataPercentComplete()<1}getActivity(){return this.getDownloadSpeed()+this.getUploadSpeed()}getPercentDoneStr(){return X.percentString(100*this.getPercentDone(),1)}getPercentDone(){return this.fields.percentDone}getStateString(){switch(this.getStatus()){case o._StatusStopped:return this.isFinished()?"Seeding complete":"Paused";case o._StatusCheckWait:return"Queued for verification";case o._StatusCheck:return"Verifying local data";case o._StatusDownloadWait:return"Queued for download";case o._StatusDownload:return"Downloading";case o._StatusSeedWait:return"Queued for seeding";case o._StatusSeed:return"Seeding";case null:return"Unknown";default:return"Error"}}seedRatioLimit(e){switch(this.getSeedRatioMode()){case o._RatioUseGlobal:return e.seedRatioLimit();case o._RatioUseLocal:return this.getSeedRatioLimit();default:return-1}}getErrorMessage(){let e=this.getErrorString();switch(this.getError()){case o._ErrTrackerWarning:return`Tracker returned a warning: ${e}`;case o._ErrTrackerError:return`Tracker returned an error: ${e}`;case o._ErrLocalError:return`Error: ${e}`;default:return null}}getCollatedName(){let e=this.fields;return!e.collatedName&&e.name&&(e.collatedName=e.name.toLowerCase()),e.collatedName||""}getCollatedTrackers(){let e=this.fields;return!e.collatedTrackers&&e.trackers&&(e.collatedTrackers=o.collateTrackers(e.trackers)),e.collatedTrackers||""}testState(e){let t=this.getStatus();switch(e){case b.FilterActive:return this.getPeersGettingFromUs()>0||this.getPeersSendingToUs()>0||this.getWebseedsSendingToUs()>0||this.isChecking();case b.FilterSeeding:return t===o._StatusSeed||t===o._StatusSeedWait;case b.FilterDownloading:return t===o._StatusDownload||t===o._StatusDownloadWait;case b.FilterPaused:return this.isStopped();case b.FilterFinished:return this.isFinished();default:return!0}}test(e,t,r,s){let n=this.testState(e);if(n&&r&&(n=this.getCollatedName().includes(r.toLowerCase())),n){let c=this.getLabels();s.length>0&&(n=s.some(i=>c.includes(i)))}return n&&t&&t.length>0&&(n=this.getCollatedTrackers().includes(t)),n}static compareById(e,t){return e.getId()-t.getId()}static compareByName(e,t){return e.getCollatedName().localeCompare(t.getCollatedName())||o.compareById(e,t)}static compareByQueue(e,t){return e.getQueuePosition()-t.getQueuePosition()}static compareByAge(e,t){let r=e.getDateAdded();return t.getDateAdded()-r||o.compareByQueue(e,t)}static compareByState(e,t){let r=e.getStatus();return t.getStatus()-r||o.compareByQueue(e,t)}static compareByActivity(e,t){let r=e.getActivity();return t.getActivity()-r||o.compareByState(e,t)}static compareByRatio(e,t){let r=e.getUploadRatio(),s=t.getUploadRatio();return rs?-1:o.compareByState(e,t)}static compareByProgress(e,t){let r=e.getPercentDone(),s=t.getPercentDone();return r-s||o.compareByRatio(e,t)}static compareBySize(e,t){let r=e.getTotalSize(),s=t.getTotalSize();return r-s||o.compareByName(e,t)}static compareTorrents(e,t,r,s){let n=0;switch(r){case b.SortByActivity:n=o.compareByActivity(e,t);break;case b.SortByAge:n=o.compareByAge(e,t);break;case b.SortByQueue:n=o.compareByQueue(e,t);break;case b.SortByProgress:n=o.compareByProgress(e,t);break;case b.SortBySize:n=o.compareBySize(e,t);break;case b.SortByState:n=o.compareByState(e,t);break;case b.SortByRatio:n=o.compareByRatio(e,t);break;case b.SortByName:n=o.compareByName(e,t);break;default:console.log(`Unrecognized sort mode: ${r}`),n=o.compareByName(e,t);break}return s===b.SortDescending&&(n=-n),n}static sortTorrents(e,t,r){switch(t){case b.SortByActivity:e.sort(this.compareByActivity);break;case b.SortByAge:e.sort(this.compareByAge);break;case b.SortByName:e.sort(this.compareByName);break;case b.SortByProgress:e.sort(this.compareByProgress);break;case b.SortByQueue:e.sort(this.compareByQueue);break;case b.SortByRatio:e.sort(this.compareByRatio);break;case b.SortBySize:e.sort(this.compareBySize);break;case b.SortByState:e.sort(this.compareByState);break;default:console.log(`Unrecognized sort mode: ${t}`),e.sort(this.compareByName);break}return r===b.SortDescending&&e.reverse(),e}};C._StatusStopped=0;C._StatusCheckWait=1;C._StatusCheck=2;C._StatusDownloadWait=3;C._StatusDownload=4;C._StatusSeedWait=5;C._StatusSeed=6;C._RatioUseGlobal=0;C._RatioUseLocal=1;C._RatioUnlimited=2;C._ErrNone=0;C._ErrTrackerWarning=1;C._ErrTrackerError=2;C._ErrLocalError=3;C._TrackerInactive=0;C._TrackerWaiting=1;C._TrackerQueued=2;C._TrackerActive=3;C.Fields={};C.Fields.Metadata=["addedDate","file-count","name","primary-mime-type","totalSize"];C.Fields.Stats=["error","errorString","eta","isFinished","isStalled","labels","leftUntilDone","metadataPercentComplete","peersConnected","peersGettingFromUs","peersSendingToUs","percentDone","queuePosition","rateDownload","rateUpload","recheckProgress","seedRatioMode","seedRatioLimit","sizeWhenDone","status","trackers","downloadDir","uploadedEver","uploadRatio","webseedsSendingToUs"];C.Fields.InfoExtra=["comment","creator","dateCreated","files","hashString","isPrivate","magnetLink","pieceCount","pieceSize"];C.Fields.StatsExtra=["activityDate","corruptEver","desiredAvailable","downloadedEver","fileStats","haveUnchecked","haveValid","peers","startDate","trackerStats"];var Rt=["encryption","speed-up","speed-down","percent-done","status","peer-address","peer-app-name"],ne=class o extends EventTarget{constructor(e){super(),this.closed=!1,this.controller=e,this.elements=this._create(),this.current_page=this.elements.info.root,this.interval=setInterval(this._refreshTorrents.bind(this),3e3),this.name="inspector",this.selection_listener=t=>this._setTorrents(t.selected),this.torrent_listener=()=>this._updateCurrentPage(),this.torrents=[],this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null,this.elements.dismiss.addEventListener("click",()=>this.close()),Object.seal(this),e.addEventListener("torrent-selection-changed",this.selection_listener),this._setTorrents(this.controller.getSelectedTorrents()),document.body.append(this.elements.root)}close(){if(!this.closed){clearInterval(this.interval),this._setTorrents([]),this.elements.root.remove(),this.controller.removeEventListener("torrent-selection-changed",this.selection_listener),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))this[e]=null;this.closed=!0}}static _createInfoPage(){let e=document.createElement("div");e.classList.add("inspector-info-page");let t={root:e},r=c=>{let i=document.createElement("div");i.textContent=c,i.classList.add("section-label"),e.append(i)},s=c=>{let i=document.createElement("label");h(i,c),e.append(i);let l=document.createElement("span");return e.append(l),l};r("Activity");let n=[["have","Have:"],["availability","Availability:"],["uploaded","Uploaded:"],["downloaded","Downloaded:"],["state","State:"],["running_time","Running time:"],["remaining_time","Remaining:"],["last_activity","Last activity:"],["error","Error:"]];for(let[c,i]of n)t[c]=s(i);r("Details"),n=[["name","Name:"],["size","Size:"],["location","Location:"],["hash","Hash:"],["privacy","Privacy:"],["origin","Origin:"],["dateAdded","Date added:"],["magnetLink","Magnet:"],["comment","Comment:"],["labels","Labels:"]];for(let[c,i]of n)t[c]=s(i);return t}static _createListPage(e,t){let r=document.createElement("div"),s=document.createElement(e);return s.id=t,r.append(s),{list:s,root:r}}static _createTiersPage(){return o._createListPage("div","inspector-tiers-list")}static _createFilesPage(){return o._createListPage("ul","inspector-file-list")}static _createPeersPage(){let e=document.createElement("table");e.classList.add("peer-list");let t=document.createElement("thead"),r=document.createElement("tr"),s=["","Up","Down","Done","Status","Address","Client"];for(let[c,i]of s.entries()){let l=document.createElement("th"),a=Rt[c];a==="encryption"&&(l.dataset.encrypted=!0),l.classList.add(a),h(l,i),r.append(l)}let n=document.createElement("tbody");return t.append(r),e.append(t),e.append(n),{root:e,tbody:n}}_create(){let e={files:o._createFilesPage(),info:o._createInfoPage(),peers:o._createPeersPage(),tiers:o._createTiersPage()},t=s=>{this.current_page=s,this._updateCurrentPage()};return{...Xe("inspector",[["inspector-tab-info",e.info.root,"Info"],["inspector-tab-peers",e.peers.root,"Peers"],["inspector-tab-tiers",e.tiers.root,"Tiers"],["inspector-tab-files",e.files.root,"Files"]],t.bind(this)),...e}}_setTorrents(e){let t="dataChanged",r=this.torrent_listener;for(let s of this.torrents)s.removeEventListener(t,r);this.torrents=[...e];for(let s of this.torrents)s.addEventListener(t,r);this._refreshTorrents(),this._updateCurrentPage()}static _needsExtraInfo(e){return e.some(t=>!t.hasExtraInfo())}_refreshTorrents(){let{controller:e,torrents:t}=this,r=t.map(s=>s.getId());if(r&&r.length>0){let s=["id",...C.Fields.StatsExtra];o._needsExtraInfo(t)&&s.push(...C.Fields.InfoExtra),e.updateTorrents(r,s)}}_updateCurrentPage(){let{current_page:e,elements:t}=this;switch(e){case t.files.root:this._updateFiles();break;case t.info.root:this._updateInfo();break;case t.peers.root:this._updatePeers();break;case t.tiers.root:this._updateTiers();break;default:console.warn("unexpected page"),console.log(e)}}_updateInfo(){let e="None",t="Mixed",r="Unknown",s=X,n=Date.now(),{elements:c,torrents:i}=this,l=i.reduce((g,d)=>g+d.getSizeWhenDone(),0),a=null;if(i.length===0)a=e;else if(i.every(g=>g.isFinished()))a="Finished";else if(i.every(g=>g.isStopped()))a="Paused";else{let g=u=>u.getStateString(),d=g(i[0]);a=i.every(u=>g(u)===d)?d:t}h(c.info.state,a);let p=a;if(i.length===0)a=e;else{let g=i.reduce((I,y)=>I+y.getHaveValid(),0),d=i.reduce((I,y)=>I+y.getHaveUnchecked(),0),u=i.reduce((I,y)=>I+y.getLeftUntilDone(),0),m=100*(l?(l-u)/l:1);a=s.percentString(m,1),d?a=`${s.size(g)} of ${s.size(l)} (${a}%), ${s.size(d)} Unverified`:u?a=`${s.size(g)} of ${s.size(l)} (${a}%)`:a=`${s.size(g)} (100%)`}if(h(c.info.have,s.stringSanitizer(a)),i.length===0)a=e;else if(l===0)a=e;else{let g=i.reduce((d,u)=>u.getHave()+u.getDesiredAvailable(),0);a=`${s.percentString(100*g/l,1)}%`}if(h(c.info.availability,s.stringSanitizer(a)),i.length===0)a=e;else{let g=i.reduce((u,m)=>u+m.getDownloadedEver(),0),d=i.reduce((u,m)=>u+m.getFailedEver(),0);a=d?`${s.size(g)} (+${s.size(d)} discarded after failed checksum)`:s.size(g)}if(h(c.info.downloaded,s.stringSanitizer(a)),i.length===0)a=e;else{let g=i.reduce((u,m)=>u+m.getUploadedEver(),0),d=i.reduce((u,m)=>u+m.getSizeWhenDone(),0)||i.reduce((u,m)=>u+m.getHaveValid(),0);a=`${s.size(g)} (Ratio: ${s.ratioString(se.ratio(g,d))})`}if(h(c.info.uploaded,a),i.length===0)a=e;else if(i.every(g=>g.isStopped()))a=p;else{let g=u=>u.getStartDate(),d=g(i[0]);a=i.every(u=>g(u)===d)?s.timeInterval(n/1e3-d):t}if(h(c.info.running_time,a),i.length===0)a=e;else{let g=u=>u.getETA(),d=g(i[0]);i.every(u=>g(u)===d)?d<0?a=r:a=s.timeInterval(d):a=t}if(h(c.info.remaining_time,a),i.length===0)a=e;else{let g=i.reduce((u,m)=>Math.max(u,m.getLastActivity()),-1),d=Math.floor(n/1e3);if(0u.getErrorString(),d=g(i[0]);a=i.every(u=>g(u)===d)?d:t}if(h(c.info.error,a||e),i.length===1?a=i[0].getName():a=i.length>0?t:e,h(c.info.name,a),i.length===0)a=e;else{let g=i.reduce((d,u)=>d+u.getTotalSize(),0);if(g){let d=y=>y.getPieceSize(),u=i.reduce((y,G)=>y+G.getPieceCount(),0),m=s.number(u),I=d(i[0]);a=i.every(y=>d(y)===I)?`${s.size(g)} (${m} pieces @ ${s.mem(I)})`:`${s.size(g)} (${m} pieces)`}else a="None"}if(h(c.info.size,s.stringSanitizer(a)),i.length===0)a=e;else{let g=u=>u.getHashString(),d=g(i[0]);a=i.every(u=>g(u)===d)?d:t}if(h(c.info.hash,a),i.length===0)a=e;else{let g=u=>u.getPrivateFlag(),d=g(i[0]);i.every(u=>g(u)===d)?d?a="Private to this tracker -- DHT and PEX disabled":a="Public torrent":a=t}if(h(c.info.privacy,a),i.length===0)a=e;else{let g=u=>u.getComment(),d=g(i[0]);a=i.every(u=>g(u)===d)?d:t}if(a=a||e,a.startsWith("https://")||a.startsWith("http://")?(a=encodeURI(a),c.info.comment.innerHTML=`${a}`):h(c.info.comment,a),a=i.length===0?e:i[0].getLabels().join(", "),h(c.info.labels,a),i.length===0)a=e;else{let g=f=>f.getCreator(),d=g(i[0]),u=!i.every(f=>g(f)===d);g=f=>f.getDateCreated();let m=g(i[0]),I=!i.every(f=>g(f)===m),y=!d||d.length===0,G=!m;u||I?a=t:y&&G?a=r:G&&!y?a=`Created by ${d}`:y&&!G?a=`Created on ${new Date(m*1e3).toDateString()}`:a=`Created by ${d} on ${new Date(m*1e3).toDateString()}`}if(h(c.info.origin,a),i.length===0)a=e;else{let g=u=>u.getDownloadDir(),d=g(i[0]);a=i.every(u=>g(u)===d)?d:t}if(h(c.info.location,a),i.length===0)a=e;else{let g=u=>u.getDateAdded(),d=g(i[0]);a=i.every(u=>g(u)===d)?new Date(d*1e3).toLocaleString(navigator.language,{day:"2-digit",hour:"2-digit",hour12:!1,minute:"2-digit",month:"short",second:"2-digit",timeZoneName:"short",weekday:"short",year:"numeric"}):t}if(h(c.info.dateAdded,a),i.length===0)h(c.info.magnetLink,e);else if(i.length>1)h(c.info.magnetLink,t);else{let g=i[0].getMagnetLink();c.info.magnetLink.innerHTML=``}}static _peerStatusTitle(e){let t=Object.seal({"?":"We unchoked this peer, but they're not interested",D:"Downloading from this peer",E:"Encrypted Connection",H:"Peer was discovered through Distributed Hash Table (DHT)",I:"Peer is an incoming connection",K:"Peer has unchoked us, but we're not interested",O:"Optimistic unchoke",T:"Peer is connected via uTP",U:"Uploading to peer",X:"Peer was discovered through Peer Exchange (PEX)",d:"We would download from this peer if they'd let us",u:"We would upload to this peer if they'd ask"});return[...e].filter(r=>t[r]).map(r=>`${r}: ${t[r]}`).join(` -`)}_updatePeers(){let e=X,{elements:t,torrents:r}=this,{tbody:s}=t.peers,n=[(i,l)=>{l.dataset.encrypted=i.isEncrypted},(i,l)=>h(l,i.rateToPeer?e.speedBps(i.rateToPeer):""),(i,l)=>h(l,i.rateToClient?e.speedBps(i.rateToClient):""),(i,l)=>h(l,`${Math.floor(i.progress*100)}%`),(i,l)=>{h(l,i.flagStr),l.setAttribute("title",o._peerStatusTitle(i.flagStr))},(i,l)=>{h(l,i.address),l.setAttribute("title",i.address)},(i,l)=>{h(l,i.clientName),l.setAttribute("title",i.clientName)}],c=[];for(let i of r){let l=document.createElement("tr");l.classList.add("torrent-row");let a=document.createElement("td");a.setAttribute("colspan",n.length),h(a,i.getName()),l.append(a),c.push(l);for(let p of i.getPeers()){let g=document.createElement("tr");g.classList.add("peer-row");for(let[d,u]of n.entries()){let m=document.createElement("td");m.classList.add(Rt[d]),u(p,m),g.append(m)}c.push(g)}for(;s.firstChild;)s.firstChild.remove();s.append(...c)}}static getAnnounceState(e){switch(e.announceState){case C._TrackerActive:return"Announce in progress";case C._TrackerWaiting:{let t=Math.max(0,e.nextAnnounceTime-Date.now()/1e3);return`Next announce in ${X.timeInterval(t)}`}case C._TrackerQueued:return"Announce is queued";case C._TrackerInactive:return e.isBackup?"Tracker will be used as a backup":"Announce not scheduled";default:return`unknown announce state: ${e.announceState}`}}static lastAnnounceStatus(e){let t="Last Announce",r=["N/A"];if(e.hasAnnounced){let s=X.timestamp(e.lastAnnounceTime);e.lastAnnounceSucceeded?r=[s," (got ",X.countString("peer","peers",e.lastAnnouncePeerCount),")"]:(t="Announce error",r=[e.lastAnnounceResult?`${e.lastAnnounceResult} - `:"",s])}return{label:t,value:r.join("")}}static lastScrapeStatus(e){let t="Last Scrape",r="N/A";if(e.hasScraped){let s=X.timestamp(e.lastScrapeTime);e.lastScrapeSucceeded?r=s:(t="Scrape error",r=(e.lastScrapeResult?`${e.lastScrapeResult} - `:"")+s)}return{label:t,value:r}}static _getOrigin(e){try{let t="udp://";if(e.announce.startsWith(t)){let s="http://",n=e.announce.replace(t,s);return new URL(n).origin.replace(s,t)}return new URL(e.announce).origin}catch{return[e.sitename||e.host||e.announce]}}_updateTiers(){let e="N/A",{list:t}=this.elements.tiers,{torrents:r}=this,s=[];for(let n of r){if(r.length>1){let c=document.createElement("div");c.classList.add("tier-list-torrent"),h(c,n.getName()),s.push(c)}for(let c of n.getTrackers()){let i=o.getAnnounceState(c),l=o.lastAnnounceStatus(c),a=o.lastScrapeStatus(c),p=document.createElement("div");p.classList.add("tier-list-row");let g=document.createElement("div"),d=o._getOrigin(c);g.classList.add("tier-list-tracker"),h(g,`${d} - tier ${c.tier+1}`),g.setAttribute("title",c.announce),p.append(g),g=document.createElement("div"),g.classList.add("tier-announce"),h(g,`${l.label}: ${l.value}`),p.append(g),g=document.createElement("div"),g.classList.add("tier-seeders"),h(g,`Seeders: ${c.seederCount>-1?c.seederCount:e}`),p.append(g),g=document.createElement("div"),g.classList.add("tier-state"),h(g,i),p.append(g),g=document.createElement("div"),g.classList.add("tier-leechers"),h(g,`Leechers: ${c.leecherCount>-1?c.leecherCount:e}`),p.append(g),g=document.createElement("div"),g.classList.add("tier-scrape"),h(g,`${a.label}: ${a.value}`),p.append(g),g=document.createElement("div"),g.classList.add("tier-downloads"),h(g,`Downloads: ${c.downloadCount>-1?c.downloadCount:e}`),p.append(g),s.push(p)}}for(;t.firstChild;)t.firstChild.remove();t.append(...s)}_changeFileCommand(e,t){let{controller:r,file_torrent:s}=this,n=s.getId();r.changeFileCommand(n,e,t)}_onFileWantedToggled(e){let{indices:t,wanted:r}=e;this._changeFileCommand(t,r?"files-wanted":"files-unwanted")}_onFilePriorityToggled(e){let{indices:t,priority:r}=e,s=null;switch(r.toString()){case"-1":s="priority-low";break;case"1":s="priority-high";break;default:s="priority-normal"}this._changeFileCommand(t,s)}_clearFileList(){let{list:e}=this.elements.files;for(;e.firstChild;)e.firstChild.remove();this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null}static createFileTreeModel(e){let t=[],r={children:{},file_indices:[]};for(let[s,n]of e.getFiles().entries()){let{name:c}=n,i=c.split("/"),l=r;for(let[a,p]of i.entries()){let g=l.children[p];g||(l.children[p]=g={children:{},depth:a,file_indices:[],name:p,parent:l}),l=g}l.file_index=s,delete l.children,t.push(l)}for(let s of t){let{file_index:n}=s,c=s;do c.file_indices.push(n),c=c.parent;while(c)}return r}addNodeToView(e,t,r){let s=new Ze(e,r.depth,r.name,r.file_indices);s.addEventListener("wantedToggled",this._onFileWantedToggled.bind(this)),s.addEventListener("priorityToggled",this._onFilePriorityToggled.bind(this)),this.file_rows.push(s),t.append(s.getElement())}addSubtreeToView(e,t,r){if(r.parent&&this.addNodeToView(e,t,r),r.children)for(let s of Object.values(r.children))this.addSubtreeToView(e,t,s)}_updateFiles(){let{list:e}=this.elements.files,{file_rows:t,file_torrent:r,file_torrent_n:s,torrents:n}=this;if(n.length!==1){this._clearFileList();return}let[c]=n,i=c.getFiles().length;if(c!==r||i!==s){this._clearFileList(),this.file_torrent=c,this.file_torrent_n=i,this.file_rows=[];let l=document.createDocumentFragment(),a=o.createFileTreeModel(c);this.addSubtreeToView(c,l,a),e.append(l)}else for(let l of t)l.refresh()}};var Fe=class o extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){let e=this.controller.getSelectedTorrents();e.length!==0&&(this.torrents=e,this.elements=o._create(),this.elements.confirm.addEventListener("click",()=>this._onConfirm()),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.elements.entry.value=e[0].getDownloadDir(),document.body.append(this.elements.root),this.elements.entry.focus())}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){let e=this.torrents.map(r=>r.getId()),t=this.elements.entry.value.trim();this.remote.moveTorrents(e,t),this.close()}static _create(){let e=J("move-dialog");e.root.setAttribute("aria-label","Move Torrent"),e.heading.textContent="Set Torrent Location",confirm.textContent="Apply";let t=document.createElement("label");t.setAttribute("for","torrent-path"),t.textContent="Location:",e.workarea.append(t);let r=document.createElement("input");return r.setAttribute("type","text"),r.id="torrent-path",e.entry=r,e.workarea.append(r),e}};var z=class o extends EventTarget{constructor(e){super(),this.elements=o._create(e),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.options=e,document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}static _create(e){let{heading:t,message:r}=e,s=J("confirm-dialog");return s.confirm.remove(),delete s.confirm,s.heading.textContent=t,s.workarea.textContent=r,s}};var $=class extends EventTarget{constructor(e,t,r="",s=null){super(),this.controller=e,this.remote=t,this.elements=this._create(r),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.elements.confirm.addEventListener("click",()=>this._onConfirm()),document.body.append(this.elements.root),s&&(this.elements.file_input.files=s),this._updateFreeSpaceInAddDialog(),this.elements.url_input.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_updateFreeSpaceInAddDialog(){let e=this.elements.folder_input.value;this.remote.getFreeSpace(e,(t,r)=>{this.closed||(this.elements.freespace.textContent=r>0?`${X.size(r)} Free`:"")})}_onConfirm(){let{controller:e,elements:t,remote:r}=this,{file_input:s,folder_input:n,start_input:c,url_input:i}=t,l=!c.checked,a=n.value.trim();for(let g of s.files){let d=new FileReader;d.addEventListener("load",u=>{let m=u.target.result,I="base64,",y=m.indexOf(I);if(y===-1)return;let G={arguments:{"download-dir":a,metainfo:m.slice(Math.max(0,y+I.length)),paused:l},method:"torrent-add"};r.sendRequest(G,f=>{f.result!=="success"&&(alert(`Error adding "${g.name}": ${f.result}`),e.setCurrentPopup(new z({heading:`Error adding "${g.name}"`,message:f.result})))})}),d.readAsDataURL(g)}let p=i.value.trim();if(p.length>0){/^[\da-f]{40}$/i.test(p)&&(p=`magnet:?xt=urn:btih:${p}`);let g={arguments:{"download-dir":a,filename:p,paused:l},method:"torrent-add"};r.sendRequest(g,d=>{d.result!=="success"&&e.setCurrentPopup(new z({heading:`Error adding "${p}"`,message:d.result}))})}this._onDismiss()}_create(e){let t=J(),{confirm:r,root:s,heading:n,workarea:c}=t;s.classList.add("open-torrent"),n.textContent="Add Torrents",r.textContent="Add";let i=F(),l=document.createElement("label");l.setAttribute("for",i),l.textContent="Please select torrent files to add:",c.append(l);let a=document.createElement("input");a.type="file",a.name="torrent-files[]",a.id=i,a.multiple=!0,c.append(a),t.file_input=a,i=F(),l=document.createElement("label"),l.setAttribute("for",i),l.textContent="Or enter a URL:",c.append(l),a=document.createElement("input"),a.type="url",a.id=i,a.value=e,c.append(a),t.url_input=a,i=F(),l=document.createElement("label"),l.id="add-dialog-folder-label",l.for=i,l.textContent="Destination folder: ",c.append(l);let p=document.createElement("span");p.id="free-space-text",l.append(p),c.append(l),t.freespace=p,a=document.createElement("input"),a.type="text",a.id="add-dialog-folder-input",a.addEventListener("change",()=>this._updateFreeSpaceInAddDialog()),a.value=this.controller.session_properties["download-dir"],c.append(a),t.folder_input=a;let g=document.createElement("div");c.append(g);let d=document.createElement("input");return d.type="checkbox",d.id="auto-start-check",d.checked=this.controller.shouldAddedTorrentsStart(),g.append(d),t.start_input=d,l=document.createElement("label"),l.id="auto-start-label",l.setAttribute("for",d.id),l.textContent="Start when added",g.append(l),t}};var qe=[0],Z={_DaemonVersion:"version",_DownSpeedLimit:"speed-limit-down",_DownSpeedLimited:"speed-limit-down-enabled",_QueueMoveBottom:"queue-move-bottom",_QueueMoveDown:"queue-move-down",_QueueMoveTop:"queue-move-top",_QueueMoveUp:"queue-move-up",_Root:"http://127.0.0.1:9092/transmission/rpc/",_TurtleDownSpeedLimit:"alt-speed-down",_TurtleState:"alt-speed-enabled",_TurtleUpSpeedLimit:"alt-speed-up",_UpSpeedLimit:"speed-limit-up",_UpSpeedLimited:"speed-limit-up-enabled"},ie=class o{constructor(e){this._connection_alert=null,this._controller=e,this._session_id=""}sendRequest(e,t,r){let s=new Headers;s.append("cache-control","no-cache"),s.append("content-type","application/json"),s.append("pragma","no-cache"),this._session_id&&s.append(o._SessionHeader,this._session_id);let n=null;fetch(Z._Root,{body:JSON.stringify(e),headers:s,method:"POST"}).then(c=>{if(n=c,c.status===409){let i=new Error(o._SessionHeader);throw i.header=c.headers.get(o._SessionHeader),i}return c.json()}).then(c=>{t&&t.call(r,c,n),this._connection_alert&&(this._connection_alert.close(),this._connection_alert=null)}).catch(c=>{if(c.message===o._SessionHeader){this._session_id=c.header,this.sendRequest(e,t,r);return}console.trace(c),this._controller.togglePeriodicSessionRefresh(!1),this._connection_alert=new z({heading:"Connection failed",message:"Could not connect to the server. You may need to reload the page to reconnect."}),this._controller.setCurrentPopup(this._connection_alert)})}loadDaemonPrefs(e,t){let r={method:"session-get"};this.sendRequest(r,e,t)}checkPort(e,t,r){let s={arguments:{ipProtocol:e},method:"port-test"};this.sendRequest(s,t,r)}renameTorrent(e,t,r,s,n){let c={arguments:{ids:e,name:r,path:t},method:"torrent-rename-path"};this.sendRequest(c,s,n)}setLabels(e,t,r){let s={ids:e,labels:t};this.sendRequest({arguments:s,method:"torrent-set"},r)}loadDaemonStats(e,t){let r={method:"session-stats"};this.sendRequest(r,e,t)}updateTorrents(e,t,r,s){let n={arguments:{fields:t,format:"table"},method:"torrent-get"};e&&(n.arguments.ids=e),this.sendRequest(n,c=>{let i;i={removed:[],torrents:[]},i.torrents=[["id","addedDate","file-count","name","primary-mime-type","totalSize","error","errorString","eta","isFinished","isStalled","labels","leftUntilDone","metadataPercentComplete","peersConnected","peersGettingFromUs","peersSendingToUs","percentDone","queuePosition","rateDownload","rateUpload","recheckProgress","seedRatioMode","seedRatioLimit","sizeWhenDone","status","trackers","downloadDir","uploadedEver","uploadRatio","webseedsSendingToUs","hashString","pieceCount","pieceSize"]],qe[0]+=256e6;for(let[l,a]of[9993,9994,9995,9996,9997,9998,9999].entries()){let p=[a,1680120820,16,`this.is.a.long.title.this.is.a.long.title.this.is.a.long.title.this.is.a.long.title Demo torrent ${String(a).padStart(2,"0")}`,"application/octet-stream",64e9,0,"",-1,!0,!1,["demo",`state ${l}`],[9996,9997].includes(a)?4096:0,1,64,8,16,.4864,0,qe[0],qe[0],.8664,[9996,9997].includes(a)?0:1,1,0,l,[],l<3?"Z:/Transmission":"C:/Transmission",2048e8,.5064,0,"5f6047b31a7010937400590a68f92c6e091f7290",1391,1048576];i.torrents.push(p),i.torrents[i.torrents.length-1][i.torrents[0].indexOf("trackers")]=[{announce:"udp://torrent.net:3333",id:0,scrape:"udp://torrent.net:3333",sitename:"torrent",tier:0},{announce:"udp://torrent.org:6666",id:1,scrape:"udp://torrent.org:6666",sitename:"torrent",tier:1},{announce:"udp://transmission.me:1111/announce",id:2,scrape:"udp://transmission.me:1111/scrape",sitename:"transmission",tier:2},{announce:"udp://transmission.me:2222/announce",id:3,scrape:"udp://transmission.me:2222/scrape",sitename:"transmission",tier:2},{announce:"udp://transmission.to:3333/announce",id:4,scrape:"udp://transmission.to:3333/scrape",sitename:"transmission",tier:4},{announce:"udp://transmission.to:5555/announce",id:5,scrape:"udp://transmission.to:5555/scrape",sitename:"transmission",tier:4}]}r.call(s,i.torrents,i.removed)})}getFreeSpace(e,t,r){let s={arguments:{path:e},method:"free-space"};this.sendRequest(s,n=>{let c=n.arguments;t.call(r,c.path,c["size-bytes"])})}changeFileCommand(e,t,r){let s={ids:[e]};s[r]=t,this.sendRequest({arguments:s,method:"torrent-set"},()=>{this._controller.refreshTorrents([e])})}sendTorrentSetRequests(e,t,r,s,n){r||(r={}),r.ids=t;let c={arguments:r,method:e};this.sendRequest(c,s,n)}sendTorrentActionRequests(e,t,r,s){this.sendTorrentSetRequests(e,t,null,r,s)}startTorrents(e,t,r,s){let n=t?"torrent-start-now":"torrent-start";this.sendTorrentActionRequests(n,e,r,s)}stopTorrents(e,t,r){this.sendTorrentActionRequests("torrent-stop",e,t,r)}moveTorrents(e,t,r,s){this.sendTorrentSetRequests("torrent-set-location",e,{location:t,move:!0},r,s)}removeTorrents(e,t){let r={arguments:{"delete-local-data":t,ids:[]},method:"torrent-remove"};if(e)for(let s=0,n=e.length;s{this._controller.refreshTorrents()})}verifyTorrents(e,t,r){this.sendTorrentActionRequests("torrent-verify",e,t,r)}reannounceTorrents(e,t,r){this.sendTorrentActionRequests("torrent-reannounce",e,t,r)}addTorrentByUrl(e,t){/^[\da-f]{40}$/i.test(e)&&(e=`magnet:?xt=urn:btih:${e}`);let r={arguments:{filename:e,paused:t.paused},method:"torrent-add"};this.sendRequest(r,()=>{this._controller.refreshTorrents()})}savePrefs(e){let t={arguments:e,method:"session-set"};this.sendRequest(t,()=>{this._controller.loadDaemonPrefs()})}updateBlocklist(){let e={method:"blocklist-update"};this.sendRequest(e,()=>{this._controller.loadDaemonPrefs()})}moveTorrentsToTop(e,t,r){this.sendTorrentActionRequests(Z._QueueMoveTop,e,t,r)}moveTorrentsToBottom(e,t,r){this.sendTorrentActionRequests(Z._QueueMoveBottom,e,t,r)}moveTorrentsUp(e,t,r){this.sendTorrentActionRequests(Z._QueueMoveUp,e,t,r)}moveTorrentsDown(e,t,r){this.sendTorrentActionRequests(Z._QueueMoveDown,e,t,r)}};ie._SessionHeader="X-Transmission-Session-Id";function Je(o,e){let t=document.createElement("fieldset");t.classList.add("section",o);let r=document.createElement("legend");return r.classList.add("title"),r.textContent=e,t.append(r),t}function Yt(o,e,t,r){let s=document.createElement("button");return s.textContent=e,s.addEventListener("click",r),o.append(s),s.dataset.action=t,s}var ce=class extends EventTarget{constructor(e,t,r,s){super(),this.action_listener=this._onActionChange.bind(this),this.action_manager=s,this.action_manager.addEventListener("change",this.action_listener),this.prefs_listener=this._onPrefsChange.bind(this),this.prefs=t,this.prefs.addEventListener("change",this.prefs_listener),this.closed=!1,this.remote=r,this.name="overflow-menu",this.session_listener=this._onSessionChange.bind(this),this.session_manager=e,this.session_manager.addEventListener("session-change",this.session_listener);let{session_properties:n}=e;Object.assign(this,this._create(n)),this.outside=new K(this.root),this.outside.addEventListener("click",()=>this.close()),Object.seal(this),this.show()}show(){document.body.append(this.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.session_listener),this.action_manager.removeEventListener("change",this.action_listener),this.prefs.removeEventListener("change",this.prefs_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))this[e]=null;this.closed=!0}}_onSessionChange(e){let{alt_speed_check:t}=this.elements,{session_properties:r}=e;t.checked=r[Z._TurtleState]}_onPrefsChange(e){switch(e.key){case b.SortDirection:case b.SortMode:this.root.querySelector(`[data-pref="${e.key}"]`).value=e.value;break;default:break}}_onActionChange(e){let t=this.actions[e.action];t&&this._updateElement(t)}_updateElement(e){if(e.dataset.action){let{action:t}=e.dataset,r=this.action_manager.keyshortcuts(t);r&&e.setAttribute("aria-keyshortcuts",r),H(e,this.action_manager.isEnabled(t))}}_onClick(e){let{action:t,pref:r}=e.target.dataset;if(t){this.action_manager.click(t);return}if(r){this.prefs[r]=e.target.value;return}console.log("unhandled"),console.log(e),console.trace()}_create(e){let t={},r={},s=this._onClick.bind(this),n=document.createElement("div");n.classList.add("overflow-menu","popup");let c=Je("display","Display");n.append(c);let i=document.createElement("div");i.id="display-options",c.append(i);let l=document.createElement("div");l.classList.add("table-row"),i.append(l);let a=document.createElement("label");a.id="display-sort-mode-label",a.textContent="Sort by",l.append(a);let p=document.createElement("select");p.id="display-sort-mode-select",p.dataset.pref=b.SortMode,l.append(p);let g=[[b.SortByActivity,"Activity"],[b.SortByAge,"Age"],[b.SortByName,"Name"],[b.SortByProgress,"Progress"],[b.SortByQueue,"Queue order"],[b.SortByRatio,"Ratio"],[b.SortBySize,"Size"],[b.SortByState,"State"]];for(let[x,A]of g){let L=document.createElement("option");L.value=x,L.textContent=A,p.append(L)}a.setAttribute("for",p.id),p.value=this.prefs.sort_mode,p.addEventListener("change",x=>{this.prefs.sort_mode=x.target.value}),l=document.createElement("div"),l.classList.add("table-row"),i.append(l);let d=document.createElement("input");d.id="display-sort-reverse-check",d.dataset.pref=b.SortDirection,d.type="checkbox",l.append(d),a=document.createElement("label"),a.id="display-sort-reverse-label",a.setAttribute("for",d.id),a.textContent="Reverse sort",l.append(a),d.checked=this.prefs.sort_direction!==b.SortAscending,d.addEventListener("input",x=>{this.prefs.sort_direction=x.target.checked?b.SortDescending:b.SortAscending}),l=document.createElement("div"),l.classList.add("table-row"),i.append(l);let u="toggle-compact-rows";d=document.createElement("input"),d.id="display-compact-check",d.dataset.action=u,d.type="checkbox",l.append(d),a=document.createElement("label"),a.id="display-compact-label",a.for=d.id,a.setAttribute("for",d.id),a.textContent=this.action_manager.text(u),d.checked=this.prefs.display_mode===b.DisplayCompact,l.append(a),d.addEventListener("input",x=>{let{checked:A}=x.target;this.prefs.display_mode=A?b.DisplayCompact:b.DisplayFull}),l=document.createElement("div"),l.classList.add("table-row"),i.append(l),u="toggle-contrast",d=document.createElement("input"),d.id="contrast-more-check",d.dataset.action=u,d.type="checkbox",d.classList.add("switch"),a=document.createElement("label"),a.id="contrast-more-label",a.for=d.id,a.setAttribute("for",d.id),a.textContent=this.action_manager.text(u),d.checked=this.prefs.contrast_mode===b.ContrastMore,l.append(d),l.append(a),d.addEventListener("input",x=>{let{checked:A}=x.target;this.prefs.contrast_mode=A?b.ContrastMore:b.ContrastLess}),l=document.createElement("div"),l.classList.add("table-row","display-fullscreen-row"),i.append(l),d=document.createElement("input"),d.id="display-fullscreen-check",d.type="checkbox";let m=()=>document.fullscreenElement!==null;d.checked=m(),d.addEventListener("input",()=>{m()?document.exitFullscreen():document.body.requestFullscreen()}),document.addEventListener("fullscreenchange",()=>{d.checked=m()}),l.append(d),a=document.createElement("label"),a.id="display-fullscreen-label",a.for=d.id,a.setAttribute("for",d.id),a.textContent="Fullscreen",l.append(a),c=Je("speed","Speed Limit"),n.append(c),i=document.createElement("div"),i.id="speed-options",c.append(i),l=document.createElement("div"),l.classList.add("speed-up"),i.append(l),a=document.createElement("label"),a.id="speed-up-label",a.textContent="Upload:",l.append(a);let I="Unlimited";p=document.createElement("select"),p.id="speed-up-select",l.append(p);let y=["50","100","250","500","1000","2500","5000","10000",I];for(let x of[...new Set(y).add(`${e[Z._UpSpeedLimit]}`).values()].sort((A,L)=>A-L)){let A=document.createElement("option");A.value=x,A.textContent=x===I?I:X.speed(x),p.append(A)}a.setAttribute("for",p.id),p.value=e[Z._UpSpeedLimited]?`${e[Z._UpSpeedLimit]}`:I,p.addEventListener("change",x=>{let{value:A}=x.target;console.log(x),A===I?this.remote.savePrefs({[Z._UpSpeedLimited]:!1}):this.remote.savePrefs({[Z._UpSpeedLimited]:!0,[Z._UpSpeedLimit]:Number.parseInt(A,10)})}),l=document.createElement("div"),l.classList.add("speed-down"),i.append(l),a=document.createElement("label"),a.id="speed-down-label",a.textContent="Download:",l.append(a),p=document.createElement("select"),p.id="speed-down-select",l.append(p);for(let x of[...new Set(y).add(`${e[Z._DownSpeedLimit]}`).values()].sort((A,L)=>A-L)){let A=document.createElement("option");A.value=x,A.textContent=x===I?I:X.speed(x),p.append(A)}a.setAttribute("for",p.id),p.value=e[Z._DownSpeedLimited]?`${e[Z._DownSpeedLimit]}`:I,p.addEventListener("change",x=>{let{value:A}=x.target;console.log(x),A===I?this.remote.savePrefs({[Z._DownSpeedLimited]:!1}):this.remote.savePrefs({[Z._DownSpeedLimited]:!0,[Z._DownSpeedLimit]:Number.parseInt(A,10)})}),l=document.createElement("div"),l.classList.add("alt-speed"),i.append(l),d=document.createElement("input"),d.id="alt-speed-check",d.type="checkbox",d.checked=e[Z._TurtleState],d.addEventListener("change",x=>{this.remote.savePrefs({[Z._TurtleState]:x.target.checked})}),l.append(d),r.alt_speed_check=d,a=document.createElement("label"),a.id="alt-speed-image",a.setAttribute("for",d.id),l.append(a),a=document.createElement("label"),a.id="alt-speed-label",a.setAttribute("for",d.id),a.textContent="Use Temp limits",l.append(a),a=document.createElement("label"),a.id="alt-speed-values-label",a.setAttribute("for",d.id);let G=X.speed(e[Z._TurtleUpSpeedLimit]),f=X.speed(e[Z._TurtleDownSpeedLimit]);a.textContent=`(${G} up, ${f} down)`,l.append(a),c=Je("actions","Actions"),n.append(c);for(let x of["show-preferences-dialog","show-shortcuts-dialog","pause-all-torrents","start-all-torrents"]){let A=this.action_manager.text(x);t[x]=Yt(c,A,x,s)}c=Je("help","Help"),n.append(c),i=document.createElement("div"),c.append(i);for(let x of["show-statistics-dialog","show-about-dialog"]){let A=this.action_manager.text(x);t[x]=Yt(i,A,x,s)}let v=document.createElement("a");return v.href="https://transmissionbt.com/donate.html",v.target="_blank",v.textContent="Donate",i.append(v),this._updateElement=this._updateElement.bind(this),{actions:t,elements:r,root:n}}};var We=class o extends EventTarget{static _initTimeDropDown(e){for(let t=0;t<24*4;++t){let r=t/4,s=t%4*15,n=t*15,c=`${r}:${s||"00"}`;e.options[t]=new Option(c,n)}}static _initDayDropDown(e){let t=[["Everyday","127"],["Weekdays","62"],["Weekends","65"],["Sunday","1"],["Monday","2"],["Tuesday","4"],["Wednesday","8"],["Thursday","16"],["Friday","32"],["Saturday","64"]];for(let r=0;t[r];++r){let[s,n]=t[r];e.options[r]=new Option(s,n)}}_checkPort(){for(let[e,t]of Object.entries(this.elements.network.port_status_label))delete t.dataset.open,h(t,"Checking..."),this.remote.checkPort(e,r=>this._onPortChecked(e,r),this)}_onPortChecked(e,t){if(this.closed)return;let r=this.elements.network.port_status_label[e],s=t.arguments["port-is-open"]||!1;r.dataset.open=s,"port-is-open"in t.arguments?h(r,s?"Open":"Closed"):h(r,"Error")}_setBlocklistButtonEnabled(e){let t=this.elements.peers.blocklist_update_button;H(t,e),t.value=e?"Update":"Updating..."}static _getValue(e){if(e.tagName==="TEXTAREA")return e.value;switch(e.type){case"checkbox":case"radio":return e.checked;case"number":case"select-one":case"text":case"url":{let t=e.value;return Number.parseInt(t,10).toString()===t?Number.parseInt(t,10):Number.parseFloat(t).toString()===t?Number.parseFloat(t):t}default:return null}}_onMaybePortChanged(e){(e==="peer-port"||e==="port-forwarding-enabled")&&this._checkPort()}_onControlChanged(e){let{key:t}=e.target.dataset;this.remote.savePrefs({[t]:o._getValue(e.target)}),this._onMaybePortChanged(t)}_onDialogClosed(){this.dispatchEvent(new Event("closed"))}_update(){this._setBlocklistButtonEnabled(!0);for(let[e,t]of Object.entries(this.session_manager.session_properties))for(let r of this.elements.root.querySelectorAll(`[data-key="${e}"]`))if(e==="blocklist-size"){let s=X.number(t);r.innerHTML=`Blocklist has ${s} rules`,h(this.elements.peers.blocklist_update_button,"Update")}else switch(r.type){case"checkbox":case"radio":r.checked=t;break;case"text":case"textarea":case"url":case"email":case"number":case"search":r!==document.activeElement&&(r.value!=t&&this._onMaybePortChanged(e),r.value=t);break;case"select-one":r.value=t;break;default:console.log(r.type);break}}shouldAddedTorrentsStart(){return this.data.elements.root.find("#start-added-torrents")[0].checked}static _createCheckAndLabel(e,t){let r=document.createElement("div");r.id=e;let s=document.createElement("input");s.id=F(),s.type="checkbox",r.append(s);let n=document.createElement("label");return n.textContent=t,n.setAttribute("for",s.id),r.append(n),{check:s,label:n,root:r}}static _enableIfChecked(e,t){let r=()=>{e.tagName==="INPUT"?H(e,t.checked):e.classList.toggle("disabled",!t.checked)};t.addEventListener("change",r),r()}static _getProtocolHandlerRegistered(){return localStorage.getItem("protocol-handler-registered")==="true"}static _updateProtocolHandlerButton(e){e.removeAttribute("disabled"),e.removeAttribute("title"),o._getProtocolHandlerRegistered()?(e.textContent="Remove Browser Handler","unregisterProtocolHandler"in navigator||e.setAttribute("title","Your browser does not support removing protocol handlers. This button only allows you to re-register a handler.")):(e.textContent="Add Browser Handler",e.removeAttribute("title"),"registerProtocolHandler"in navigator||(e.setAttribute("disabled",!0),e.setAttribute("title","Your browser does not support protocol handlers")))}static _toggleProtocolHandler(e){let t=new URL(window.location.href);t.search="addtorrent=%s",this._getProtocolHandlerRegistered()?(navigator.unregisterProtocolHandler?.("magnet",t.toString()),localStorage.removeItem("protocol-handler-registered"),o._updateProtocolHandlerButton(e)):(navigator.registerProtocolHandler("magnet",t.toString(),"Transmission Web"),localStorage.setItem("protocol-handler-registered","true"),o._updateProtocolHandlerButton(e))}static _createTorrentsPage(){let e=document.createElement("div");e.classList.add("prefs-torrents-page");let t=document.createElement("div");t.textContent="Downloading",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Download to:",e.append(t);let r=document.createElement("input");r.type="text",r.id=F(),r.dataset.key="download-dir",t.setAttribute("for",r.id),e.append(r);let s=r,n=o._createCheckAndLabel("incomplete-dir-div","Use temporary folder:");n.check.title="Separate folder to temporarily store downloads until they are complete.",n.check.dataset.key="incomplete-dir-enabled",n.label.title=n.check.title,e.append(n.root);let c=n.check;r=document.createElement("input"),r.type="text",r.dataset.key="incomplete-dir",e.append(r),o._enableIfChecked(r,n.check);let i=r;n=o._createCheckAndLabel("autostart-div","Start when added"),n.check.dataset.key="start-added-torrents",e.append(n.root);let l=n.check;n=o._createCheckAndLabel("suffix-div",`Append "part" to incomplete files' names`),n.check.dataset.key="rename-partial-files",e.append(n.root);let a=n.check;n=o._createCheckAndLabel("download-queue-div","Download queue size:"),n.check.dataset.key="download-queue-enabled",e.append(n.root);let p=n.check;r=document.createElement("input"),r.type="number",r.dataset.key="download-queue-size",e.append(r),o._enableIfChecked(r,n.check);let g=r;t=document.createElement("div"),t.textContent="Seeding",t.classList.add("section-label"),e.append(t),n=o._createCheckAndLabel("stop-ratio-div","Stop seeding at ratio:"),n.check.dataset.key="seedRatioLimited",e.append(n.root);let d=n.check;r=document.createElement("input"),r.type="number",r.min="0.1",r.step="any",r.dataset.key="seedRatioLimit",e.append(r),o._enableIfChecked(r,n.check);let u=r;n=o._createCheckAndLabel("stop-idle-div","Stop seeding if idle for N mins:"),n.check.dataset.key="idle-seeding-limit-enabled",e.append(n.root);let m=n.check;r=document.createElement("input"),r.type="number",r.min="0.1",r.step="any",r.dataset.key="idle-seeding-limit",e.append(r),o._enableIfChecked(r,n.check);let I=r;t=document.createElement("div"),t.textContent="Magnet Protocol Handler",t.classList.add("section-label"),e.append(t);let y=document.createElement("button");return y.classList.add("register-handler-button"),o._updateProtocolHandlerButton(y),e.append(y),{autostart_check:l,download_dir:s,download_queue_check:p,download_queue_input:g,incomplete_dir_check:c,incomplete_dir_input:i,register_handler_button:y,root:e,stop_idle_check:m,stop_idle_input:I,stop_ratio_check:d,stop_ratio_input:u,suffix_check:a}}static _createSpeedPage(){let e=document.createElement("div");e.classList.add("prefs-speed-page");let t=document.createElement("div");t.textContent="Speed Limits",t.classList.add("section-label"),e.append(t);let r=o._createCheckAndLabel("upload-speed-div","Upload (kB/s):");r.check.dataset.key="speed-limit-up-enabled",e.append(r.root);let s=r.check,n=document.createElement("input");n.type="number",n.dataset.key="speed-limit-up",e.append(n),o._enableIfChecked(n,r.check);let c=n;r=o._createCheckAndLabel("download-speed-div","Download (kB/s):"),r.check.dataset.key="speed-limit-down-enabled",e.append(r.root);let i=r.check;n=document.createElement("input"),n.type="number",n.dataset.key="speed-limit-down",e.append(n),o._enableIfChecked(n,r.check);let l=n;t=document.createElement("div"),t.textContent="Alternative Speed Limits",t.classList.add("section-label","alt-speed-section-label"),e.append(t),t=document.createElement("div"),t.textContent="Override normal speed limits manually or at scheduled times",t.classList.add("alt-speed-label"),e.append(t),t=document.createElement("label"),t.textContent="Upload (kB/s):",e.append(t),n=document.createElement("input"),n.type="number",n.dataset.key="alt-speed-up",n.id=F(),t.setAttribute("for",n.id),e.append(n);let a=n;t=document.createElement("label"),t.textContent="Download (kB/s):",e.append(t),n=document.createElement("input"),n.type="number",n.dataset.key="alt-speed-down",n.id=F(),t.setAttribute("for",n.id),e.append(n);let p=n;r=o._createCheckAndLabel("alt-times-div","Scheduled times"),r.check.dataset.key="alt-speed-time-enabled",e.append(r.root);let g=r.check;t=document.createElement("label"),t.textContent="From:",o._enableIfChecked(t,r.check),e.append(t);let d=document.createElement("select");d.id=F(),d.dataset.key="alt-speed-time-begin",o._initTimeDropDown(d),t.setAttribute("for",d.id),e.append(d),o._enableIfChecked(d,r.check);let u=d;t=document.createElement("label"),t.textContent="To:",o._enableIfChecked(t,r.check),e.append(t),d=document.createElement("select"),d.id=F(),d.dataset.key="alt-speed-time-end",o._initTimeDropDown(d),t.setAttribute("for",d.id),e.append(d),o._enableIfChecked(d,r.check);let m=d;return t=document.createElement("label"),t.textContent="On days:",o._enableIfChecked(t,r.check),e.append(t),d=document.createElement("select"),d.id=F(),d.dataset.key="alt-speed-time-day",o._initDayDropDown(d),t.setAttribute("for",d.id),e.append(d),o._enableIfChecked(d,r.check),{alt_days_select:d,alt_download_speed_input:p,alt_from_select:u,alt_times_check:g,alt_to_select:m,alt_upload_speed_input:a,download_speed_check:i,download_speed_input:l,root:e,upload_speed_check:s,upload_speed_input:c}}static _createPeersPage(){let e=document.createElement("div");e.classList.add("prefs-peers-page");let t=document.createElement("div");t.textContent="Connections",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Max peers per torrent:",e.append(t);let r=document.createElement("input");r.type="number",r.dataset.key="peer-limit-per-torrent",r.id=F(),t.setAttribute("for",r.id),e.append(r);let s=r;t=document.createElement("label"),t.textContent="Max peers overall:",e.append(t),r=document.createElement("input"),r.type="number",r.dataset.key="peer-limit-global",r.id=F(),t.setAttribute("for",r.id),e.append(r);let n=r;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Encryption mode:",e.append(t);let c=document.createElement("select");c.id=F(),c.dataset.key="encryption",c.options[0]=new Option("Prefer encryption","preferred"),c.options[1]=new Option("Allow encryption","tolerated"),c.options[2]=new Option("Require encryption","required"),e.append(c);let i=c,l=o._createCheckAndLabel("use-pex-div","Use PEX to find more peers");l.check.title="PEX is a tool for exchanging peer lists with the peers you're connected to.",l.check.dataset.key="pex-enabled",l.label.title=l.check.title,e.append(l.root);let a=l.check;l=o._createCheckAndLabel("use-dht-div","Use DHT to find more peers"),l.check.title="DHT is a tool for finding peers without a tracker.",l.check.dataset.key="dht-enabled",l.label.title=l.check.title,e.append(l.root);let p=l.check;l=o._createCheckAndLabel("use-lpd-div","Use LPD to find more peers"),l.check.title="LPD is a tool for finding peers on your local network.",l.check.dataset.key="lpd-enabled",l.label.title=l.check.title,e.append(l.root);let g=l.check;t=document.createElement("div"),t.textContent="Blocklist",t.classList.add("section-label"),e.append(t),l=o._createCheckAndLabel("blocklist-enabled-div","Enable blocklist:"),l.check.dataset.key="blocklist-enabled",e.append(l.root);let d=l.check;r=document.createElement("input"),r.type="url",r.value="http://www.example.com/blocklist",r.dataset.key="blocklist-url",e.append(r),o._enableIfChecked(r,l.check);let u=r;t=document.createElement("label"),t.textContent="Blocklist has {n} rules",t.dataset.key="blocklist-size",t.classList.add("blocklist-size-label"),o._enableIfChecked(t,l.check),e.append(t);let m=document.createElement("button");return m.classList.add("blocklist-update-button"),m.textContent="Update",e.append(m),o._enableIfChecked(m,l.check),{blocklist_enabled_check:d,blocklist_update_button:m,blocklist_url_input:u,dht_check:p,encryption_select:i,lpd_check:g,max_peers_overall_input:n,max_peers_per_torrent_input:s,pex_check:a,root:e}}static _createNetworkPage(){let e=document.createElement("div");e.classList.add("prefs-network-page");let t=document.createElement("div");t.textContent="Listening Port",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Peer listening port:",e.append(t);let r=document.createElement("input");r.type="number",r.dataset.key="peer-port",r.id=F(),t.setAttribute("for",r.id),e.append(r);let s=r,n=document.createElement("div");n.classList.add("port-status"),t=document.createElement("label"),t.textContent="IPv4 port is",n.append(t);let c=document.createElement("label");c.textContent="?",c.classList.add("port-status-label"),n.append(c),n.append(document.createElement("br")),t=document.createElement("label"),t.textContent="IPv6 port is",n.append(t);let i=document.createElement("label");i.textContent="?",i.classList.add("port-status-label"),n.append(i),e.append(n);let l=o._createCheckAndLabel("randomize-port","Randomize port on launch");l.check.dataset.key="peer-port-random-on-start",e.append(l.root);let a=l.check;l=o._createCheckAndLabel("port-forwarding","Use port forwarding from my router"),l.check.dataset.key="port-forwarding-enabled",e.append(l.root);let p=l.check;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),l=o._createCheckAndLabel("utp-enabled","Enable uTP for peer communication"),l.check.dataset.key="utp-enabled",e.append(l.root);let g=l.check;t=document.createElement("div"),t.textContent="Default Public Trackers",t.classList.add("section-label"),e.append(t);let d=["Trackers to use on all public torrents.","To add a backup URL, add it on the next line after a primary URL.","To add a new primary URL, add it after a blank line."];for(let I of d)t=document.createElement("label"),t.classList.add("default-trackers-label"),t.textContent=I,t.setAttribute("for","default-trackers"),e.append(t);let u=document.createElement("textarea");return u.dataset.key="default-trackers",u.id="default-trackers",e.append(u),{default_trackers_textarea:u,port_forwarding_check:p,port_input:s,port_status_label:{ipv4:c,ipv6:i},random_port_check:a,root:e,utp_check:g}}static _create(){let e={network:o._createNetworkPage(),peers:o._createPeersPage(),speed:o._createSpeedPage(),torrents:o._createTorrentsPage()};return{...Xe("prefs-dialog",[["prefs-tab-torrent",e.torrents.root,"Torrents"],["prefs-tab-speed",e.speed.root,"Speed"],["prefs-tab-peers",e.peers.root,"Peers"],["prefs-tab-network",e.network.root,"Network"]]),...e}}constructor(e,t){super(),this.closed=!1,this.session_manager=e,this.remote=t,this.update_from_session=()=>this._update(),this.elements=o._create(),this.elements.peers.blocklist_update_button.addEventListener("click",n=>{h(n.target,"Updating blocklist..."),this.remote.updateBlocklist(),this._setBlocklistButtonEnabled(!1)}),this.elements.torrents.register_handler_button.addEventListener("click",n=>{o._toggleProtocolHandler(n.currentTarget)}),this.elements.dismiss.addEventListener("click",()=>this.close()),this.outside=new K(this.elements.root),this.outside.addEventListener("click",()=>this.close()),Object.seal(this);let r=this._onControlChanged.bind(this),s=n=>{for(let c of Object.values(n))if(c.tagName==="INPUT")switch(c.type){case"checkbox":case"radio":case"number":case"text":case"url":c.addEventListener("change",r);break;default:console.trace(`unhandled input: ${c.type}`);break}else(c.tagName==="TEXTAREA"||c.tagName==="SELECT")&&c.addEventListener("change",r)};s(this.elements.network),s(this.elements.peers),s(this.elements.speed),s(this.elements.torrents),this.session_manager.addEventListener("session-change",this.update_from_session),this.update_from_session(),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.update_from_session),this.elements.root.remove(),dispatchEvent(new Event("close"));for(let e of Object.keys(this))this[e]=null;this.closed=!0}}};var we=class o extends EventTarget{constructor(e){super(),this.options=e,this.elements=o._create(e),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.elements.confirm.addEventListener("click",()=>this._onConfirm()),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(let e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_onConfirm(){let{remote:e,torrents:t,trash:r}=this.options;t.length>0&&e.removeTorrents(t,r),this.close()}static _create(e){let{trash:t}=e,{heading:r,message:s}=o._createMessage(e),n=J("remove-dialog");return n.heading.textContent=r,n.message.textContent=s,n.confirm.textContent=t?"Trash":"Remove",n}static _createMessage(e){let t=null,r=null,{torrents:s,trash:n}=e,[c]=s;return n&&s.length===1?(t=`Remove ${c.getName()} and delete data?`,r="All data downloaded for this torrent will be deleted. Are you sure you want to remove it?"):n?(t=`Remove ${s.length} transfers and delete data?`,r="All data downloaded for these torrents will be deleted. Are you sure you want to remove them?"):s.length===1?(t=`Remove ${c.getName()}?`,r="Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?"):(t=`Remove ${s.length} transfers?`,r="Once removed, continuing the transfers will require the torrent files. Are you sure you want to remove them?"),{heading:t,message:r}}};var Le=class o extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){let e=this.controller.getSelectedTorrents();if(e.length!==1){console.trace();return}this.torrents=e,this.elements=o._create(),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.elements.confirm.addEventListener("click",()=>this._onConfirm()),this.elements.entry.value=e[0].getName(),document.body.append(this.elements.root),this.elements.entry.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){let[e]=this.torrents,t=e.getName(),r=this.elements.entry.value;this.remote.renameTorrent([e.getId()],t,r,s=>{s.result==="success"&&e.refresh(s.arguments)}),this.close()}static _create(){let e=J("rename-dialog");e.root.setAttribute("aria-label","Rename Torrent"),e.heading.textContent="Enter new name:",e.confirm.textContent="Rename";let t=document.createElement("label");t.setAttribute("for","torrent-rename-name"),t.textContent="Enter new name:",e.workarea.append(t);let r=document.createElement("input");return r.setAttribute("type","text"),r.id="torrent-rename-name",e.entry=r,e.workarea.append(r),e}};var He=class o extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){let e=this.controller.getSelectedTorrents();if(e.length===0){console.error("At least one selected torrent expected.");return}let[t]=e;this.torrents=e,this.elements=o._create(),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),this.elements.confirm.addEventListener("click",()=>this._onConfirm()),this.elements.entry.value=t.getLabels().join(", "),document.body.append(this.elements.root),this.elements.entry.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){let{torrents:e}=this,{remote:t}=this,r=e.map(l=>l.getId()),{elements:s}=this,{entry:n}=s,{value:c}=n,i=c.split(/ *, */).filter(l=>l.length>0);t.setLabels(r,i,l=>{if(l.result==="success")for(let a of e)a.refresh({labels:i})}),this.close()}static _create(){let e=J("labels-dialog");e.root.setAttribute("aria-label","Edit Labels"),e.heading.textContent="Edit Labels:",e.confirm.textContent="Save";let t=document.createElement("label");t.setAttribute("for","torrent-labels"),t.textContent="Labels:",e.workarea.append(t);let r=document.createElement("input");return r.setAttribute("type","text"),r.id="torrent-labels",e.entry=r,e.workarea.append(r),e}};var Qe=class o extends EventTarget{constructor(e){super(),this.elements=o._create(e),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){let t=J("shortcuts-dialog");t.root.setAttribute("aria-label","Keyboard Shortcuts");let r=document.createElement("table"),s=document.createElement("thead");r.append(s);let n=document.createElement("tr");s.append(n);let c=document.createElement("th");c.textContent="Key",n.append(c),c=document.createElement("th"),c.textContent="Action",n.append(c);let i=document.createElement("tbody");r.append(i);let l={};for(let[a,p]of e.allShortcuts().entries()){let g=a.split("+"),d=[g.pop(),...g].join("+");l[d]={name:p,shortcut:a}}for(let[,a]of Object.entries(l).sort()){let{name:p,shortcut:g}=a;n=document.createElement("tr"),i.append(n);let d=document.createElement("td");d.textContent=g.replaceAll("+"," + "),n.append(d),d=document.createElement("td"),d.textContent=e.text(p),n.append(d)}return t.heading.textContent="Transmission",t.dismiss.textContent="Close",t.heading.textContent="Keyboard shortcuts",t.message.append(r),t.confirm.remove(),delete t.confirm,t}};var Ue=class o extends EventTarget{constructor(e){super(),this.remote=e;let t=()=>this.remote.loadDaemonStats(s=>this._update(s.arguments)),r=5e3;this.interval=setInterval(t,r),t(),this.elements=o._create(),this.elements.dismiss.addEventListener("click",()=>this._onDismiss()),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove();for(let e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_update(e){console.log(e);let t=X,r=e["current-stats"],s=se.ratio(r.uploadedBytes,r.downloadedBytes);h(this.elements.session.up,t.size(r.uploadedBytes)),h(this.elements.session.down,t.size(r.downloadedBytes)),this.elements.session.ratio.innerHTML=t.ratioString(s),h(this.elements.session.time,t.timeInterval(r.secondsActive)),r=e["cumulative-stats"],s=se.ratio(r.uploadedBytes,r.downloadedBytes),h(this.elements.total.up,t.size(r.uploadedBytes)),h(this.elements.total.down,t.size(r.downloadedBytes)),this.elements.total.ratio.innerHTML=t.ratioString(s),h(this.elements.total.time,t.timeInterval(r.secondsActive))}static _create(){let e=J("statistics-dialog"),{confirm:t,dismiss:r,heading:s,root:n,workarea:c}=e;t.remove(),r.textContent="Close",delete e.confirm;let i="Statistics";n.setAttribute("aria-label",i),s.textContent=i;let l=["Uploaded:","Downloaded:","Ratio:","Running time:"],a=Ke("Current session",l),[p,g,d,u]=a.children,m=e.session={};m.up=p,m.down=g,m.ratio=d,m.time=u,c.append(a.root),a=Ke("Total",l);let[I,y,G,f]=a.children,v=e.total={};return v.up=I,v.down=y,v.ratio=G,v.time=f,c.append(a.root),e}};var W={createIcon:o=>{let e=document.createElement("div");return e.classList.add("icon"),e.dataset.iconMimeType=o.getPrimaryMimeType().split("/",1).pop(),e.dataset.iconMultifile=o.getFileCount()>1?"true":"false",e},formatDL:o=>`\u25BC ${X.speedBps(o.getDownloadSpeed())}`,formatETA:o=>{let e=o.getETA();return e<0||e>=999*60*60?"":`ETA: ${X.timeInterval(e,1)}`},formatLabels:(o,e)=>{let t=o.getLabels();e.innerHTML="";for(let r of t){let s=document.createElement("span");s.classList.add("torrent-label"),s.textContent=r,e.append(s)}},formatUL:o=>`\u25B2 ${X.speedBps(o.getUploadSpeed())}`,getProgressInfo:(o,e)=>{let t=e.getStatus(),r=["torrent-progress-bar"],s=100,n=null;if(t===C._StatusStopped&&r.push("paused"),e.needsMetaData())r.push("magnet"),s=e.getMetadataPercentComplete()*100;else if(t===C._StatusCheck)r.push("verify"),s=e.getRecheckProgress()*100;else if(e.getLeftUntilDone()>0)r.push("leech"),s=e.getPercentDone()*100;else if(r.push("seed"),t!==C._StatusStopped){let c=e.seedRatioLimit(o);n=c>0?e.getUploadRatio()*100/c:100}return e.isQueued()&&r.push("queued"),{classList:r,percent:s,ratio:n}},renderProgressbar:(o,e,t)=>{let r=W.getProgressInfo(o,e),s=Math.min(r.ratio||r.percent,100),n=`${X.percentString(s,2)}%`;t.className=r.classList.join(" "),t.style.setProperty("--progress",n),t.dataset.progress=r.ratio?"100%":n}},ke=class o{static getPeerDetails(e){let t=X,r=e.getErrorMessage();if(r)return r;if(e.isDownloading()){let s=e.getPeersConnected(),n=e.getWebseedsSendingToUs();return n&&s?["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",s),"and",t.countString("web seed","web seeds",n),"\u2013",W.formatDL(e),W.formatUL(e)].join(" "):n?["Downloading from",t.countString("web seed","web seeds",n),"\u2013",W.formatDL(e),W.formatUL(e)].join(" "):["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",s),"\u2013",W.formatDL(e),W.formatUL(e)].join(" ")}return e.isSeeding()?["Seeding to",e.getPeersGettingFromUs(),"of",t.countString("peer","peers",e.getPeersConnected()),"-",W.formatUL(e)].join(" "):e.isChecking()?["Verifying local data (",X.percentString(100*e.getRecheckProgress(),1),"% tested)"].join(""):e.getStateString()}static getProgressDetails(e,t){if(t.needsMetaData()){let i="retrieving";t.isStopped()&&(i="needs");let l=100*t.getMetadataPercentComplete();return[`Magnetized transfer - ${i} metadata (`,X.percentString(l,1),"%)"].join("")}let r=t.getSizeWhenDone(),s=t.getTotalSize(),n=t.isDone()||t.isSeeding(),c=[];if(n?(s===r?c.push(X.size(s)):c.push(X.size(r)," of ",X.size(t.getTotalSize())," (",t.getPercentDoneStr(),"%)"),c.push(", uploaded ",X.size(t.getUploadedEver())," (Ratio ",X.ratioString(t.getUploadRatio()),")")):c.push(X.size(r-t.getLeftUntilDone())," of ",X.size(r)," (",t.getPercentDoneStr(),"%)"),!t.isStopped()&&(!n||t.seedRatioLimit(e)>0)){c.push(" - ");let i=t.getETA();i<0||i>=999*60*60?c.push("remaining time unknown"):c.push(X.timeInterval(t.getETA(),1)," remaining")}return c.join("")}render(e,t,r){let s=t.isStopped();r.classList.toggle("paused",s);let n=r._name_container;h(n,t.getName()),W.formatLabels(t,r._labels_container),n=r._progress_details_container,n.innerHTML=o.getProgressDetails(e,t),W.renderProgressbar(e,t,r._progressbar),r._progressbar.classList.add("full");let c=t.getError()!==C._ErrNone;n=r._peer_details_container,n.classList.toggle("error",c),h(n,o.getPeerDetails(t)),n=r._toggle_running_button,n.alt=s?"Resume":"Pause",n.dataset.action=s?"resume":"pause"}createRow(e){let t=document.createElement("li");t.className="torrent";let r=W.createIcon(e),s=document.createElement("div");s.className="torrent-name";let n=document.createElement("div");n.className="torrent-labels";let c=document.createElement("div");c.className="torrent-progress-details";let i=document.createElement("div");i.classList.add("torrent-progress");let l=document.createElement("div");l.classList.add("torrent-progress-bar","full"),i.append(l);let a=document.createElement("div");a.className="torrent-peer-details";let p=document.createElement("a");return p.className="torrent-pauseresume-button",i.append(p),t.append(r),t.append(s),t.append(n),t.append(c),t.append(i),t.append(a),t._icon=r,t._name_container=s,t._labels_container=n,t._progress_details_container=c,t._progressbar=l,t._peer_details_container=a,t._toggle_running_button=p,t}},Oe=class o{static getPeerDetails(e){let t=e.getErrorMessage();if(t)return t;if(e.isDownloading()){let r=e.getDownloadSpeed()>0,s=e.getUploadSpeed()>0;if(!s&&!r)return"Idle";let n=[`${W.formatETA(e)} `];return r&&n.push(W.formatDL(e)),s&&n.push(W.formatUL(e)),n.join(" ")}return e.isSeeding()?`Ratio: ${X.ratioString(e.getUploadRatio())}, ${W.formatUL(e)}`:e.getStateString()}render(e,t,r){r.classList.toggle("paused",t.isStopped());let s=r._name_container;h(s,t.getName()),W.formatLabels(t,r._labels_container),W.renderProgressbar(e,t,r._progressbar),r._progressbar.classList.add("compact");let n=t.getError()!==C._ErrNone;s=r._details_container,s.classList.toggle("error",n),h(s,o.getPeerDetails(t))}createRow(e){let t=document.createElement("div");t.classList.add("torrent-progress-bar","compact");let r=W.createIcon(e),s=document.createElement("div");s.className="torrent-peer-details compact";let n=document.createElement("div");n.className="torrent-labels compact";let c=document.createElement("div");c.className="torrent-name compact";let i=document.createElement("li");return i.append(t),i.append(s),i.append(n),i.append(c),i.append(r),i.className="torrent compact",i._progressbar=t,i._details_container=s,i._labels_container=n,i._name_container=c,i}},Te=class{constructor(e,t,r){this._view=e,this._torrent=r,this._element=e.createRow(r);let s=()=>this.render(t);this._torrent.addEventListener("dataChanged",s),s()}getElement(){return this._element}render(e){let t=this.getTorrent();t&&this._view.render(e,t,this.getElement())}isSelected(){return this.getElement().classList.contains("selected")}getTorrent(){return this._torrent}getTorrentId(){return this.getTorrent().getId()}};var Re=class o extends EventTarget{constructor(e,t,r){super(),this.action_manager=e,this.notifications=t,this.prefs=r,this.remote=new ie(this),this.addEventListener("torrent-selection-changed",c=>this.action_manager.update(c)),this.filterText="",this._torrents={},this._rows=[],this.dirtyTorrents=new Set,this.changeStatus=!1,this.refilterSoon=E(()=>this._refilter(!1)),this.refilterAllSoon=E(()=>this._refilter(!0)),this.boundPopupCloseListener=this.popupCloseListener.bind(this),this.isTouch="ontouchstart"in window,this.busyclick=!1;for(let c of document.querySelectorAll("button[data-action]")){let{action:i}=c.dataset;H(c,this.action_manager.isEnabled(i)),c.addEventListener("click",()=>{this.action_manager.click(i)})}document.querySelector("#filter-tracker").addEventListener("change",c=>{this.setFilterTracker(c.target.value==="all"?null:c.target.value)}),this.action_manager.addEventListener("change",c=>{for(let i of document.querySelectorAll(`[data-action="${c.action}"]`))H(i,c.enabled)}),this.action_manager.addEventListener("click",c=>{switch(c.action){case"deselect-all":this._deselectAll();break;case"move-bottom":this._moveBottom();break;case"move-down":this._moveDown();break;case"move-top":this._moveTop();break;case"move-up":this._moveUp();break;case"open-torrent":this.setCurrentPopup(new $(this,this.remote));break;case"pause-all-torrents":this._stopTorrents(this._getAllTorrents());break;case"pause-selected-torrents":this._stopTorrents(this.getSelectedTorrents());break;case"reannounce-selected-torrents":this._reannounceTorrents(this.getSelectedTorrents());break;case"remove-selected-torrents":this._removeSelectedTorrents(!1);break;case"resume-selected-torrents":this._startSelectedTorrents(!1);break;case"resume-selected-torrents-now":this._startSelectedTorrents(!0);break;case"select-all":this._selectAll();break;case"show-about-dialog":this.setCurrentPopup(new ve(this.version_info));break;case"show-inspector":this.popup instanceof ne?this.setCurrentPopup(null):this.setCurrentPopup(new ne(this));break;case"show-move-dialog":this.setCurrentPopup(new Fe(this,this.remote));break;case"show-overflow-menu":this.popup instanceof ce?this.setCurrentPopup(null):this.setCurrentPopup(new ce(this,this.prefs,this.remote,this.action_manager));break;case"show-preferences-dialog":this.setCurrentPopup(new We(this,this.remote));break;case"show-shortcuts-dialog":this.setCurrentPopup(new Qe(this.action_manager));break;case"show-statistics-dialog":this.setCurrentPopup(new Ue(this.remote));break;case"show-rename-dialog":this.setCurrentPopup(new Le(this,this.remote));break;case"show-labels-dialog":this.setCurrentPopup(new He(this,this.remote));break;case"start-all-torrents":this._startTorrents(this._getAllTorrents());break;case"toggle-compact-rows":this.prefs.display_mode=this.prefs.display_mode===b.DisplayCompact?b.DisplayFull:b.DisplayCompact;break;case"trash-selected-torrents":this._removeSelectedTorrents(!0);break;case"verify-selected-torrents":this._verifyTorrents(this.getSelectedTorrents());break;default:console.warn(`unhandled action: ${c.action}`)}});let s=document.querySelector("#filter-mode");s.value=this.prefs.filter_mode,s.addEventListener("change",c=>{this.prefs.filter_mode=c.target.value,this.refilterAllSoon()}),document.addEventListener("keydown",this._keyDown.bind(this)),document.addEventListener("keyup",this._keyUp.bind(this)),s=document.querySelector("#torrent-container"),s.addEventListener("click",c=>{this.popup&&this.popup.name!=="inspector"&&this.setCurrentPopup(null),c.target===c.currentTarget&&this._deselectAll()}),s.addEventListener("dblclick",()=>{(!this.popup||this.popup.name!=="inspector")&&this.action_manager.click("show-inspector")}),s.addEventListener("dragenter",o._dragenter),s.addEventListener("dragover",o._dragenter),s.addEventListener("drop",this._drop.bind(this)),this._setupSearchBox(),this.elements={torrent_list:document.querySelector("#torrent-list")};let n=c=>{if(this.isTouch&&c.touches.length>1)return;let i=c.target;for(;i&&!i.classList.contains("torrent");)i=i.parentNode;let l=this._rows.find(m=>m.getElement()===i);l&&!l.isSelected()&&this._setSelectedRow(l);let a=new Be(this.action_manager);this.setCurrentPopup(a);let g=document.querySelector("#torrent-container").getBoundingClientRect(),d=Math.min(this.isTouch?c.touches[0].clientX:c.x,g.x+g.width-a.root.clientWidth),u=Math.min(this.isTouch?c.touches[0].clientY:c.y,g.y+g.height-a.root.clientHeight);a.root.style.left=`${d>0?d:0}px`,a.root.style.top=`${u>0?u:0}px`,c.preventDefault()};this.isTouch?(this.elements.torrent_list.addEventListener("touchstart",c=>{this.busyclick?(clearTimeout(this.busyclick),this.busyclick=!1):this.busyclick=setTimeout(n.bind(this),500,c)}),this.elements.torrent_list.addEventListener("touchend",()=>{clearTimeout(this.busyclick),this.busyclick=!1,setTimeout(()=>{this.popup&&(this.popup.root.style.pointerEvents="auto")},1)}),this.elements.torrent_list.addEventListener("touchmove",()=>{clearTimeout(this.busyclick),this.busyclick=!1}),this.elements.torrent_list.addEventListener("contextmenu",c=>{c.preventDefault()})):this.elements.torrent_list.addEventListener("contextmenu",c=>{n(c),this.popup&&(this.popup.root.style.pointerEvents="auto")}),this.loadDaemonPrefs(),this._initializeTorrents(),this.refreshTorrents(),this.togglePeriodicSessionRefresh(!0),this.prefs.addEventListener("change",({key:c,value:i})=>this._onPrefChanged(c,i));for(let[c,i]of this.prefs.entries())this._onPrefChanged(c,i)}_openTorrentFromUrl(){setTimeout(()=>{let e=new URLSearchParams(window.location.search).get("addtorrent");if(e){this.setCurrentPopup(new $(this,this.remote,e));let t=new URL(window.location);t.search="",window.history.pushState("","",t.toString())}},0)}loadDaemonPrefs(){this.remote.loadDaemonPrefs(e=>{this.session_properties=e.arguments,this._openTorrentFromUrl()})}get session_properties(){return this._session_properties}set session_properties(e){if(fe(this._session_properties,e))return;this._session_properties=Object.seal(e);let t=new Event("session-change");t.session_properties=e,this.dispatchEvent(t),this._updateGuiFromSession(e)}_setupSearchBox(){let e=document.querySelector("#torrent-search"),t="blur";e.classList.add(t),e.addEventListener("blur",()=>e.classList.add(t)),e.addEventListener("focus",()=>e.classList.remove(t)),e.addEventListener("keyup",()=>this._setFilterText(e.value))}_onPrefChanged(e,t){switch(e){case b.DisplayMode:{this.torrentRenderer=t==="compact"?new Oe:new ke,this.refilterAllSoon();break}case b.ContrastMode:{document.body.classList.remove("contrast-more"),document.body.classList.remove("contrast-less"),document.body.classList.add(`contrast-${t}`);break}case b.FilterMode:case b.SortDirection:case b.SortMode:this.refilterAllSoon();break;case b.RefreshRate:{clearInterval(this.refreshTorrentsInterval);let r=this.refreshTorrents.bind(this),s=Math.max(2,this.prefs.refresh_rate_sec)*1e3;this.refreshTorrentsInterval=setInterval(r,s);break}default:break}}_getAllTorrents(){return Object.values(this._torrents)}static _getTorrentIds(e){return e.map(t=>t.getId())}seedRatioLimit(){let e=this.session_properties;return e&&e.seedRatioLimited?e.seedRatioLimit:-1}_getSelectedRows(){return this._rows.filter(e=>e.isSelected())}getSelectedTorrents(){return this._getSelectedRows().map(e=>e.getTorrent())}_getSelectedTorrentIds(){return o._getTorrentIds(this.getSelectedTorrents())}_setSelectedRow(e){let t=e?e.getElement():null;for(let r of this.elements.torrent_list.children)r.classList.toggle("selected",r===t);this._dispatchSelectionChanged()}_selectRow(e){e.getElement().classList.add("selected"),this._dispatchSelectionChanged()}_deselectRow(e){e.getElement().classList.remove("selected"),this._dispatchSelectionChanged()}_selectAll(){for(let e of this.elements.torrent_list.children)e.classList.add("selected");this._dispatchSelectionChanged()}_deselectAll(){for(let e of this.elements.torrent_list.children)e.classList.remove("selected");this._dispatchSelectionChanged(),delete this._last_torrent_clicked}_indexOfLastTorrent(){return this._rows.findIndex(e=>e.getTorrentId()===this._last_torrent_clicked)}_selectRange(e){let t=this._indexOfLastTorrent();if(t===-1)this._selectRow(e);else{let r=this._rows.indexOf(e),s=Math.min(t,r),n=Math.max(t,r);for(let c=s;c<=n;++c)this._selectRow(this._rows[c])}this._dispatchSelectionChanged()}_dispatchSelectionChanged(){let e=[],t=[];for(let s of this._rows)(s.isSelected()?t:e).push(s.getTorrent());let r=new Event("torrent-selection-changed");r.nonselected=e,r.selected=t,this.dispatchEvent(r)}static _createKeyShortcutFromKeyboardEvent(e){let t=[];return e.ctrlKey&&t.push("Control"),e.altKey&&t.push("Alt"),e.metaKey&&t.push("Meta"),e.shiftKey&&t.push("Shift"),t.push(e.key.length===1?e.key.toUpperCase():e.key),t.join("+")}_keyDown(e){let{ctrlKey:t,keyCode:r,metaKey:s,shiftKey:n,target:c}=e,i=["INPUT","TEXTAREA"].includes(c.tagName);if(!i){let g=o._createKeyShortcutFromKeyboardEvent(e),d=this.action_manager.getActionForShortcut(g);if(d){e.preventDefault(),this.action_manager.click(d);return}}if(r===27&&this.popup){this.setCurrentPopup(null),e.preventDefault();return}let a=document.querySelector(".popup:not(.hidden)"),p=this._rows;if(!i&&!a&&!s&&!t){let g=r===16,d=r===38,u=r===40;if((d||u)&&p.length>0){let m=this._indexOfLastTorrent(),I=this._shift_index,y=0,G=p.length-1,f=m;u&&f+1<=G?++f:d&&f-1>=y&&--f;let v=p[f];I>=0?I<=m&&m=m&&m>f?this._selectRow(v):(I>=m&&f>m||I<=m&&m>f)&&this._deselectRow(p[m]):n?this._selectRange(v):this._setSelectedRow(v),v&&(this._last_torrent_clicked=v.getTorrentId(),v.getElement().scrollIntoView(),e.preventDefault())}else g&&(this._shift_index=this._indexOfLastTorrent())}}_keyUp(e){e.keyCode===16&&delete this._shift_index}static _dragenter(e){if(e.dataTransfer&&e.dataTransfer.types){let t=new Set(["text/uri-list","text/plain"]);if(e.dataTransfer.types.some(r=>t.has(r))||e.dataTransfer.types.includes("Files"))return e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy",!1}else e.dataTransfer&&(e.dataTransfer.dropEffect="none");return!0}static _isValidURL(e){try{return!!new URL(e)}catch{return!1}}shouldAddedTorrentsStart(){return this.session_properties["start-added-torrents"]}_drop(e){let t=!this.shouldAddedTorrentsStart();if(!e.dataTransfer||!e.dataTransfer.types)return!0;let r=e.dataTransfer.types.findLast(n=>["text/uri-list","text/plain"].includes(n));for(let n of e.dataTransfer.getData(r).split(` -`).map(c=>c.trim()).filter(c=>o._isValidURL(c)))this.remote.addTorrentByUrl(n,t);let{files:s}=e.dataTransfer;return s.length>0&&this.setCurrentPopup(new $(this,this.remote,"",s)),e.preventDefault(),!1}togglePeriodicSessionRefresh(e){!e&&this.sessionInterval&&(clearInterval(this.sessionInterval),delete this.sessionInterval),e&&(this.loadDaemonPrefs(),this.sessionInterval||(this.sessionInterval=setInterval(this.loadDaemonPrefs.bind(this),8e3)))}_setFilterText(e){this.filterText=e?e.trim():null,this.refilterAllSoon()}_onTorrentChanged(e){this.changeStatus&&(this._dispatchSelectionChanged(),this.changeStatus=!1);let t=e.currentTarget;this.dirtyTorrents.add(t.getId()),this.refilterSoon()}updateTorrents(e,t){this.remote.updateTorrents(e,t,(r,s)=>{let n=[],c=r.shift(),i={};for(let l of r){for(let[g,d]of c.entries())i[d]=l[g];let{id:a}=i,p=this._torrents[a];if(p){let g=p.needsMetaData();p.refresh(i),g&&!p.needsMetaData()&&n.push(a)}else p=this._torrents[a]=new C(i),p.addEventListener("dataChanged",this._onTorrentChanged.bind(this)),this.dirtyTorrents.add(a),(!("name"in p.fields)||!("status"in p.fields))&&n.push(a)}if(n.length>0){let l=["id",...C.Fields.Metadata,...C.Fields.Stats];this.updateTorrents(n,l),this.refilterSoon()}s&&(this._deleteTorrents(s),this.refilterSoon())})}refreshTorrents(){let e=["id",...C.Fields.Stats];this.updateTorrents("recently-active",e)}_initializeTorrents(){let e=["id",...C.Fields.Metadata,...C.Fields.Stats];this.updateTorrents(null,e)}_onRowClicked(e){let t=e.metaKey||e.ctrlKey,{row:r}=e.currentTarget;if(this.popup&&this.popup.name!=="inspector"&&this.setCurrentPopup(null),e.target.classList.contains("torrent-pauseresume-button"))switch(e.target.dataset.action){case"pause":this._stopTorrents([r.getTorrent()]);break;case"resume":this._startTorrents([r.getTorrent()]);break;default:break}e.stopPropagation(),e.shiftKey?(this._selectRange(r),window.focus()):!r.isSelected()&&t?this._selectRow(r):r.isSelected()?r.isSelected()&&t?this._deselectRow(r):r.isSelected()&&this._setSelectedRow(r):this._setSelectedRow(r),this._last_torrent_clicked=r.getTorrentId()}_deleteTorrents(e){if(e&&e.length>0){for(let t of e)this.dirtyTorrents.add(t),delete this._torrents[t];this.refilterSoon()}}_removeSelectedTorrents(e){let t=this.getSelectedTorrents();t.length>0&&this.setCurrentPopup(new we({remote:this.remote,torrents:t,trash:e}))}_startSelectedTorrents(e){this._startTorrents(this.getSelectedTorrents(),e)}_startTorrents(e,t){this.changeStatus=!0,this.remote.startTorrents(o._getTorrentIds(e),t,this.refreshTorrents,this)}_verifyTorrents(e){this.remote.verifyTorrents(o._getTorrentIds(e),this.refreshTorrents,this)}_reannounceTorrents(e){this.remote.reannounceTorrents(o._getTorrentIds(e),this.refreshTorrents,this)}_stopTorrents(e){this.changeStatus=!0,this.remote.stopTorrents(o._getTorrentIds(e),()=>{setTimeout(()=>{this.refreshTorrents()},500)},this)}changeFileCommand(e,t,r){this.remote.changeFileCommand(e,t,r)}_moveTop(){this.remote.moveTorrentsToTop(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveUp(){this.remote.moveTorrentsUp(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveDown(){this.remote.moveTorrentsDown(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveBottom(){this.remote.moveTorrentsToBottom(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_updateGuiFromSession(e){let[,t,r]=e.version.match(/(.*)\s\(([\da-f]+)\)/);this.version_info={checksum:r,version:t},document.querySelector("#toolbar-overflow").classList.toggle("alt-speed-enabled",e[Z._TurtleState])}_updateStatusbar(){let e=X,t=this._getAllTorrents(),r=t.reduce((c,i)=>c+i.getUploadSpeed(),0),s=t.reduce((c,i)=>c+i.getDownloadSpeed(),0),n=e.countString("Transfer","Transfers",this._rows.length);h(document.querySelector("#speed-up-label"),e.speedBps(r)),h(document.querySelector("#speed-dn-label"),e.speedBps(s)),h(document.querySelector("#filter-count"),n)}static _displayName(e){let t=e;return t.length>0&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}_updateFilterSelect(){let e=this._getTrackerCounts(),t=Object.keys(e).sort(),r="";r+=this.filterTracker?'':'';for(let s of t)r+=``;(!this.filterTrackersStr||this.filterTrackersStr!==r)&&(this.filterTrackersStr=r,document.querySelector("#filter-tracker").innerHTML=r)}sortRows(e){let t=e.map(s=>s.getTorrent()),r=e.reduce((s,n)=>(s[n.getTorrent().getId()]=n,s),{});C.sortTorrents(t,this.prefs.sort_mode,this.prefs.sort_direction);for(let[s,n]of t.entries())e[s]=r[n.getId()]}_refilter(e){let{sort_mode:t,sort_direction:r,filter_mode:s}=this.prefs,n=this.filterTracker,c=this.torrentRenderer,i=this.elements.torrent_list,l=null,a=null,p=/^labels:([\w,-\s]*)(.*)$/.exec(this.filterText);p?(l=p[2].trim(),a=p[1].split(",")):(l=this.filterText,a=[]);let g=()=>[...i.children].length,d=()=>[...i.children].reduce((w,Q)=>w+Q.classList.contains("selected")?1:0,0),u=g(),m=d();if(this._updateFilterSelect(),e){for(;i.firstChild;)i.firstChild.remove();this._rows=[],this.dirtyTorrents=new Set(Object.keys(this._torrents))}let I=[],y=[];for(let w of this._rows)this.dirtyTorrents.has(w.getTorrentId())?y.push(w):I.push(w);for(let w of y)w.getElement().remove();let G=[];for(let w of y){let Q=w.getTorrentId(),k=this._torrents[Q];k&&k.test(s,n,l,a)&&G.push(w),this.dirtyTorrents.delete(Q)}y=G;for(let w of this.dirtyTorrents.values()){let Q=this._torrents[w];if(Q&&Q.test(s,n,l,a)){let k=new Te(c,this,Q),et=k.getElement();et.row=k,y.push(k),et.addEventListener("click",this._onRowClicked.bind(this))}}this.sortRows(y);let f=[],v=I.length,x=y.length,A=document.createDocumentFragment(),L=0,ae=0;for(;L!==v||ae!==x;){let w=null;if(L===v?w=!1:ae===x?w=!0:w=C.compareTorrents(I[L].getTorrent(),y[ae].getTorrent(),t,r)<0,w)f.push(I[L++]);else{let Q=y[ae++],k=Q.getElement();L===v?A.append(k):i.insertBefore(k,I[L].getElement()),f.push(Q)}}i.append(A),this._rows=f,this.dirtyTorrents.clear(),this._updateStatusbar(),(m!==d()||u!==g())&&this._dispatchSelectionChanged()}setFilterTracker(e){let t=document.querySelector("#filter-tracker");t.value=e,this.filterTracker=e,this.refilterAllSoon()}_getTrackerCounts(){let e={};for(let t of this._getAllTorrents())for(let r of t.getTrackers()){let{sitename:s}=r;e[s]=(e[s]||0)+1}return e}popupCloseListener(e){if(e.target!==this.popup)throw new Error(e);this.popup.removeEventListener("close",this.boundPopupCloseListener),delete this.popup}setCurrentPopup(e){this.popup&&this.popup.close(),this.popup=e,this.popup&&this.popup.addEventListener("close",this.boundPopupCloseListener)}};function Ho(){let o=new le,e=new b,t=new Ge(e),r=new Re(o,t,e),s=E(()=>r.elements.torrent_list.scrollTo(0,1));window.addEventListener("load",s),window.addEventListener("orientationchange",s)}document.addEventListener("DOMContentLoaded",Ho);})(); -//# sourceMappingURL=transmission-app.js.map