__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
(()=>{var Ot=Object.create;var tt=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var jt=Object.getPrototypeOf,Ht=Object.prototype.hasOwnProperty;var Wt=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports);var Qt=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of qt(e))!Ht.call(o,n)&&n!==t&&tt(o,n,{get:()=>e[n],enumerable:!(r=$t(e,n))||r.enumerable});return o};var Kt=(o,e,t)=>(t=o!=null?Ot(jt(o)):{},Qt(e||!o||!o.__esModule?tt(t,"default",{value:o,enumerable:!0}):t,o));var zt=Wt((ee,J)=>{var Gt=200,Je="__lodash_hash_undefined__",ve=1,ut=2,mt=9007199254740991,pe="[object Arguments]",We="[object Array]",Vt="[object AsyncFunction]",ht="[object Boolean]",gt="[object Date]",ft="[object Error]",bt="[object Function]",Yt="[object GeneratorFunction]",ue="[object Map]",vt="[object Number]",Xt="[object Null]",X="[object Object]",rt="[object Promise]",Jt="[object Proxy]",_t="[object RegExp]",me="[object Set]",wt="[object String]",Zt="[object Symbol]",er="[object Undefined]",Qe="[object WeakMap]",kt="[object ArrayBuffer]",he="[object DataView]",tr="[object Float32Array]",rr="[object Float64Array]",or="[object Int8Array]",nr="[object Int16Array]",sr="[object Int32Array]",ir="[object Uint8Array]",ar="[object Uint8ClampedArray]",lr="[object Uint16Array]",cr="[object Uint32Array]",dr=/[\\^$.*+?()[\]{}|]/g,pr=/^\[object .+?Constructor\]$/,ur=/^(?:0|[1-9]\d*)$/,T={};T[tr]=T[rr]=T[or]=T[nr]=T[sr]=T[ir]=T[ar]=T[lr]=T[cr]=!0;T[pe]=T[We]=T[kt]=T[ht]=T[he]=T[gt]=T[ft]=T[bt]=T[ue]=T[vt]=T[X]=T[_t]=T[me]=T[wt]=T[Qe]=!1;var xt=typeof global=="object"&&global&&global.Object===Object&&global,mr=typeof globalThis=="object"&&globalThis!==null&&globalThis.Object==Object&&globalThis,hr=typeof self=="object"&&self&&self.Object===Object&&self,M=mr||xt||hr||Function("return this")(),yt=typeof ee=="object"&&ee&&!ee.nodeType&&ee,te=yt&&typeof J=="object"&&J&&!J.nodeType&&J,St=te&&te.exports===yt,qe=St&&xt.process,ot=function(){try{var o=te&&te.require&&te.require("util").types;return o||qe&&qe.binding&&qe.binding("util")}catch{}}(),nt=ot&&ot.isTypedArray;function gr(o,e){for(var t=-1,r=o==null?0:o.length,n=0,s=[];++t<r;){var i=o[t];e(i,t,o)&&(s[n++]=i)}return s}function fr(o,e){for(var t=-1,r=e.length,n=o.length;++t<r;)o[n+t]=e[t];return o}function br(o,e){for(var t=-1,r=o==null?0:o.length;++t<r;)if(e(o[t],t,o))return!0;return!1}function vr(o,e){for(var t=-1,r=Array(o);++t<o;)r[t]=e(t);return r}function _r(o){return function(e){return o(e)}}function wr(o,e){return o.has(e)}function kr(o,e){return o?.[e]}function xr(o){var e=-1,t=Array(o.size);return o.forEach(function(r,n){t[++e]=[n,r]}),t}function yr(o,e){return function(t){return o(e(t))}}function Sr(o){var e=-1,t=Array(o.size);return o.forEach(function(r){t[++e]=r}),t}var Er=Array.prototype,Tr=Function.prototype,_e=Object.prototype,je=M["__core-js_shared__"],Et=Tr.toString,B=_e.hasOwnProperty,st=function(){var o=/[^.]+$/.exec(je&&je.keys&&je.keys.IE_PROTO||"");return o?"Symbol(src)_1."+o:""}(),Tt=_e.toString,Cr=RegExp("^"+Et.call(B).replace(dr,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),it=St?M.Buffer:void 0,ge=M.Symbol,at=M.Uint8Array,Ct=_e.propertyIsEnumerable,Lr=Er.splice,W=ge?ge.toStringTag:void 0,lt=Object.getOwnPropertySymbols,Ar=it?it.isBuffer:void 0,Dr=yr(Object.keys,Object),Ke=Z(M,"DataView"),re=Z(M,"Map"),Ge=Z(M,"Promise"),Ve=Z(M,"Set"),Ye=Z(M,"WeakMap"),oe=Z(Object,"create"),Pr=G(Ke),Rr=G(re),Ir=G(Ge),Fr=G(Ve),zr=G(Ye),ct=ge?ge.prototype:void 0,He=ct?ct.valueOf:void 0;function Q(o){var e=-1,t=o==null?0:o.length;for(this.clear();++e<t;){var r=o[e];this.set(r[0],r[1])}}function Ur(){this.__data__=oe?oe(null):{},this.size=0}function Br(o){var e=this.has(o)&&delete this.__data__[o];return this.size-=e?1:0,e}function Mr(o){var e=this.__data__;if(oe){var t=e[o];return t===Je?void 0:t}return B.call(e,o)?e[o]:void 0}function Nr(o){var e=this.__data__;return oe?e[o]!==void 0:B.call(e,o)}function Or(o,e){var t=this.__data__;return this.size+=this.has(o)?0:1,t[o]=oe&&e===void 0?Je:e,this}Q.prototype.clear=Ur;Q.prototype.delete=Br;Q.prototype.get=Mr;Q.prototype.has=Nr;Q.prototype.set=Or;function N(o){var e=-1,t=o==null?0:o.length;for(this.clear();++e<t;){var r=o[e];this.set(r[0],r[1])}}function $r(){this.__data__=[],this.size=0}function qr(o){var e=this.__data__,t=we(e,o);if(t<0)return!1;var r=e.length-1;return t==r?e.pop():Lr.call(e,t,1),--this.size,!0}function jr(o){var e=this.__data__,t=we(e,o);return t<0?void 0:e[t][1]}function Hr(o){return we(this.__data__,o)>-1}function Wr(o,e){var t=this.__data__,r=we(t,o);return r<0?(++this.size,t.push([o,e])):t[r][1]=e,this}N.prototype.clear=$r;N.prototype.delete=qr;N.prototype.get=jr;N.prototype.has=Hr;N.prototype.set=Wr;function K(o){var e=-1,t=o==null?0:o.length;for(this.clear();++e<t;){var r=o[e];this.set(r[0],r[1])}}function Qr(){this.size=0,this.__data__={hash:new Q,map:new(re||N),string:new Q}}function Kr(o){var e=ke(this,o).delete(o);return this.size-=e?1:0,e}function Gr(o){return ke(this,o).get(o)}function Vr(o){return ke(this,o).has(o)}function Yr(o,e){var t=ke(this,o),r=t.size;return t.set(o,e),this.size+=t.size==r?0:1,this}K.prototype.clear=Qr;K.prototype.delete=Kr;K.prototype.get=Gr;K.prototype.has=Vr;K.prototype.set=Yr;function fe(o){var e=-1,t=o==null?0:o.length;for(this.__data__=new K;++e<t;)this.add(o[e])}function Xr(o){return this.__data__.set(o,Je),this}function Jr(o){return this.__data__.has(o)}fe.prototype.add=fe.prototype.push=Xr;fe.prototype.has=Jr;function q(o){var e=this.__data__=new N(o);this.size=e.size}function Zr(){this.__data__=new N,this.size=0}function eo(o){var e=this.__data__,t=e.delete(o);return this.size=e.size,t}function to(o){return this.__data__.get(o)}function ro(o){return this.__data__.has(o)}function oo(o,e){var t=this.__data__;if(t instanceof N){var r=t.__data__;if(!re||r.length<Gt-1)return r.push([o,e]),this.size=++t.size,this;t=this.__data__=new K(r)}return t.set(o,e),this.size=t.size,this}q.prototype.clear=Zr;q.prototype.delete=eo;q.prototype.get=to;q.prototype.has=ro;q.prototype.set=oo;function no(o,e){var t=be(o),r=!t&&wo(o),n=!t&&!r&&Xe(o),s=!t&&!r&&!n&&Ft(o),i=t||r||n||s,a=i?vr(o.length,String):[],c=a.length;for(var l in o)(e||B.call(o,l))&&!(i&&(l=="length"||n&&(l=="offset"||l=="parent")||s&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||go(l,c)))&&a.push(l);return a}function we(o,e){for(var t=o.length;t--;)if(Dt(o[t][0],e))return t;return-1}function so(o,e,t){var r=e(o);return be(o)?r:fr(r,t(o))}function se(o){return o==null?o===void 0?er:Xt:W&&W in Object(o)?mo(o):_o(o)}function dt(o){return ne(o)&&se(o)==pe}function Lt(o,e,t,r,n){return o===e?!0:o==null||e==null||!ne(o)&&!ne(e)?o!==o&&e!==e:io(o,e,t,r,Lt,n)}function io(o,e,t,r,n,s){var i=be(o),a=be(e),c=i?We:$(o),l=a?We:$(e);c=c==pe?X:c,l=l==pe?X:l;var m=c==X,p=l==X,d=c==l;if(d&&Xe(o)){if(!Xe(e))return!1;i=!0,m=!1}if(d&&!m)return s||(s=new q),i||Ft(o)?At(o,e,t,r,n,s):po(o,e,c,t,r,n,s);if(!(t&ve)){var u=m&&B.call(o,"__wrapped__"),g=p&&B.call(e,"__wrapped__");if(u||g){var b=u?o.value():o,v=g?e.value():e;return s||(s=new q),n(b,v,t,r,s)}}return d?(s||(s=new q),uo(o,e,t,r,n,s)):!1}function ao(o){if(!It(o)||bo(o))return!1;var e=Pt(o)?Cr:pr;return e.test(G(o))}function lo(o){return ne(o)&&Rt(o.length)&&!!T[se(o)]}function co(o){if(!vo(o))return Dr(o);var e=[];for(var t in Object(o))B.call(o,t)&&t!="constructor"&&e.push(t);return e}function At(o,e,t,r,n,s){var i=t&ve,a=o.length,c=e.length;if(a!=c&&!(i&&c>a))return!1;var l=s.get(o),m=s.get(e);if(l&&m)return l==e&&m==o;var p=-1,d=!0,u=t&ut?new fe:void 0;for(s.set(o,e),s.set(e,o);++p<a;){var g=o[p],b=e[p];if(r)var v=i?r(b,g,p,e,o,s):r(g,b,p,o,e,s);if(v!==void 0){if(v)continue;d=!1;break}if(u){if(!br(e,function(E,x){if(!wr(u,x)&&(g===E||n(g,E,t,r,s)))return u.push(x)})){d=!1;break}}else if(!(g===b||n(g,b,t,r,s))){d=!1;break}}return s.delete(o),s.delete(e),d}function po(o,e,t,r,n,s,i){switch(t){case he:if(o.byteLength!=e.byteLength||o.byteOffset!=e.byteOffset)return!1;o=o.buffer,e=e.buffer;case kt:return!(o.byteLength!=e.byteLength||!s(new at(o),new at(e)));case ht:case gt:case vt:return Dt(+o,+e);case ft:return o.name==e.name&&o.message==e.message;case _t:case wt:return o==e+"";case ue:var a=xr;case me:var c=r&ve;if(a||(a=Sr),o.size!=e.size&&!c)return!1;var l=i.get(o);if(l)return l==e;r|=ut,i.set(o,e);var m=At(a(o),a(e),r,n,s,i);return i.delete(o),m;case Zt:if(He)return He.call(o)==He.call(e)}return!1}function uo(o,e,t,r,n,s){var i=t&ve,a=pt(o),c=a.length,l=pt(e),m=l.length;if(c!=m&&!i)return!1;for(var p=c;p--;){var d=a[p];if(!(i?d in e:B.call(e,d)))return!1}var u=s.get(o),g=s.get(e);if(u&&g)return u==e&&g==o;var b=!0;s.set(o,e),s.set(e,o);for(var v=i;++p<c;){d=a[p];var E=o[d],x=e[d];if(r)var y=i?r(x,E,d,e,o,s):r(E,x,d,o,e,s);if(!(y===void 0?E===x||n(E,x,t,r,s):y)){b=!1;break}v||(v=d=="constructor")}if(b&&!v){var P=o.constructor,k=e.constructor;P!=k&&"constructor"in o&&"constructor"in e&&!(typeof P=="function"&&P instanceof P&&typeof k=="function"&&k instanceof k)&&(b=!1)}return s.delete(o),s.delete(e),b}function pt(o){return so(o,yo,ho)}function ke(o,e){var t=o.__data__;return fo(e)?t[typeof e=="string"?"string":"hash"]:t.map}function Z(o,e){var t=kr(o,e);return ao(t)?t:void 0}function mo(o){var e=B.call(o,W),t=o[W];try{o[W]=void 0;var r=!0}catch{}var n=Tt.call(o);return r&&(e?o[W]=t:delete o[W]),n}var ho=lt?function(o){return o==null?[]:(o=Object(o),gr(lt(o),function(e){return Ct.call(o,e)}))}:So,$=se;(Ke&&$(new Ke(new ArrayBuffer(1)))!=he||re&&$(new re)!=ue||Ge&&$(Ge.resolve())!=rt||Ve&&$(new Ve)!=me||Ye&&$(new Ye)!=Qe)&&($=function(o){var e=se(o),t=e==X?o.constructor:void 0,r=t?G(t):"";if(r)switch(r){case Pr:return he;case Rr:return ue;case Ir:return rt;case Fr:return me;case zr:return Qe}return e});function go(o,e){var t=typeof o;return e=e??mt,!!e&&(t=="number"||t!="symbol"&&ur.test(o))&&o>-1&&o%1==0&&o<e}function fo(o){var e=typeof o;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?o!=="__proto__":o===null}function bo(o){return!!st&&st in o}function vo(o){var e=o&&o.constructor,t=typeof e=="function"&&e.prototype||_e;return o===t}function _o(o){return Tt.call(o)}function G(o){if(o!=null){try{return Et.call(o)}catch{}try{return o+""}catch{}}return""}function Dt(o,e){return o===e||o!==o&&e!==e}var wo=dt(function(){return arguments}())?dt:function(o){return ne(o)&&B.call(o,"callee")&&!Ct.call(o,"callee")},be=Array.isArray;function ko(o){return o!=null&&Rt(o.length)&&!Pt(o)}var Xe=Ar||Eo;function xo(o,e){return Lt(o,e)}function Pt(o){if(!It(o))return!1;var e=se(o);return e==bt||e==Yt||e==Vt||e==Jt}function Rt(o){return typeof o=="number"&&o>-1&&o%1==0&&o<=mt}function It(o){var e=typeof o;return o!=null&&(e=="object"||e=="function")}function ne(o){return o!=null&&typeof o=="object"}var Ft=nt?_r(nt):lo;function yo(o){return ko(o)?no(o):co(o)}function So(){return[]}function Eo(){return!1}J.exports=xo});var de=class o extends EventTarget{constructor(){super(),this.actions=Object.seal({"deselect-all":{enabled:!1,shortcut:"Control+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:"Control+O",text:"Open torrent\u2026"},"pause-all-torrents":{enabled:!1,text:"Pause all"},"pause-selected-torrents":{enabled:!1,shortcut:"Control+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:"Control+R",text:"Resume"},"resume-selected-torrents-now":{enabled:!1,text:"Resume now"},"select-all":{enabled:!1,shortcut:"Control+A",text:"Select all"},"show-about-dialog":{enabled:!0,text:"About"},"show-inspector":{enabled:!1,shortcut:"Control+I",text:"Torrent Inspector"},"show-labels-dialog":{enabled:!1,text:"Edit Labels\u2026"},"show-move-dialog":{enabled:!1,shortcut:"Control+L",text:"Set location\u2026"},"show-overflow-menu":{enabled:!0,text:"More options\u2026"},"show-preferences-dialog":{enabled:!0,shortcut:"Control+P",text:"Edit preferences"},"show-rename-dialog":{enabled:!1,shortcut:"Control+N",text:"Rename\u2026"},"show-shortcuts-dialog":{enabled:!0,text:"Keyboard shortcuts"},"show-statistics-dialog":{enabled:!0,shortcut:"Control+S",text:"Statistics"},"start-all-torrents":{enabled:!1,text:"Start all"},"toggle-compact-rows":{enabled:!0,text:"Compact rows"},"trash-selected-torrents":{enabled:!1,text:"Trash data and remove from list\u2026"},"verify-selected-torrents":{enabled:!1,shortcut:"Control+Shift+V",text:"Verify local data"}})}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,n=e.filter(p=>p.isStopped()).length,s=e.length-n,i=t.filter(p=>p.isStopped()).length,a=t.length-i,c=n+i,l=s+a,m=e.filter(p=>p.isQueued()).length;return{active:l,nonselected_active:a,nonselected_paused:i,paused:c,selected:e.length,selected_active:s,selected_paused:n,selected_queued:m,total:r}}_updateStates(e){let t=(r,n)=>{for(let s of n)this._updateActionState(s,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"]),t(e.selected===1,["show-rename-dialog"]),t(e.selected<e.total,["select-all"])}_updateActionState(e,t){let r=this.actions[e];if(!r)throw new Error(`no such action: ${e}`);if(r.enabled!==t){r.enabled=t;let n=new Event("change");n.action=e,n.enabled=t,this.dispatchEvent(n)}}};var Ut=Kt(zt());var V={ratio(o,e){let t=Math.floor(100*o/e)/100;return t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY?t=-2:Number.isNaN(t)&&(t=-1),t},setInnerHTML(o,e){o&&o.currentHTML!==e&&(o.currentHTML=e,o.innerHTML=e)}};function To(o,e,t,r,n){for(let s of o.children)s.classList.toggle("selected",s===e);for(let s of t.children)s.classList.toggle("hidden",s!==r);n&&n(r)}function xe(o,e,t){let r=document.createElement("div");r.id=o,r.classList.add("tabs-container");let n=document.createElement("div");n.classList.add("tabs-buttons"),r.append(n);let s=document.createElement("div");s.classList.add("tabs-pages"),r.append(s);let i=[];for(let[a,c,l]of e){let m=document.createElement("button");m.id=a,m.classList.add("tabs-button"),m.setAttribute("type","button"),m.textContent=l,n.append(m),i.push(m),c.classList.add("hidden","tabs-page"),s.append(c),m.addEventListener("click",()=>To(n,m,s,c,t))}return i[0].classList.add("selected"),s.children[0].classList.remove("hidden"),{buttons:i,root:r}}function D(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 n=document.createElement("div");n.classList.add("dialog-heading"),t.append(n);let s=document.createElement("div");s.classList.add("dialog-message"),t.append(s);let i=document.createElement("div");i.classList.add("dialog-workarea"),t.append(i);let a=document.createElement("div");a.classList.add("dialog-buttons"),t.append(a);let c=document.createElement("span");c.classList.add("dialog-buttons-begin"),a.append(c);let l=document.createElement("button");l.classList.add("dialog-dismiss-button"),l.textContent="Cancel",a.append(l);let m=document.createElement("button");m.textContent="OK",a.append(m);let p=document.createElement("span");return p.classList.add("dialog-buttons-end"),a.append(p),{confirm:m,dismiss:l,heading:n,message:s,root:e,workarea:i}}function A(){return("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,o=>(o^crypto.getRandomValues(new Uint8Array(1))[0]&15>>o/4).toString(16))}function Co(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 Ze(o,e){let t=[],{root:r,content:n}=Co(o);for(let s of e){let i=document.createElement("label");i.textContent=s,n.append(i);let a=document.createElement("div");a.id=A(),n.append(a),i.setAttribute("for",a.id),t.push(a)}return{children:t,root:r}}function H(o,e=100){let t=null;return(...r)=>{t||(t=setTimeout(()=>{t=null,o(...r)},e))}}function ye(o,e){return(0,Ut.default)(o,e)}function Lo(o,e,t){t?o.setAttribute(e,!0):o.removeAttribute(e)}function z(o,e){Lo(o,"disabled",!e)}function Se(o,e){o.classList.toggle("checked",e)}var j=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 f(o,e){o.textContent!==e&&(o.textContent=e)}var Ee=class{constructor(e){this._prefs=e,this._elements={toggle:document.querySelector("#toggle-notifications")}}_setEnabled(e){this.prefs.notifications_enabled=e,f(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 h=class o extends EventTarget{constructor(){super(),this._cache={},this.dispatchPrefsChange=H((e,t,r)=>{let n=new Event("change");Object.assign(n,{key:e,old_value:t,value:r}),this.dispatchEvent(n)});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,n=r[e];n!==t&&(r[e]=t,o._setCookie(e,t),this.dispatchPrefsChange(e,n,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}};h.AltSpeedEnabled="alt-speed-enabled";h.DisplayCompact="compact";h.DisplayFull="full";h.DisplayMode="display-mode";h.FilterActive="active";h.FilterAll="all";h.FilterDownloading="downloading";h.FilterFinished="finished";h.FilterMode="filter-mode";h.FilterPaused="paused";h.FilterSeeding="seeding";h.NotificationsEnabled="notifications-enabled";h.RefreshRate="refresh-rate-sec";h.SortAscending="ascending";h.SortByActivity="activity";h.SortByAge="age";h.SortByName="name";h.SortByProgress="progress";h.SortByQueue="queue";h.SortByRatio="ratio";h.SortBySize="size";h.SortByState="state";h.SortDescending="descending";h.SortDirection="sort-direction";h.SortMode="sort-mode";h._Defaults={[h.AltSpeedEnabled]:!1,[h.DisplayMode]:h.DisplayFull,[h.FilterMode]:h.FilterAll,[h.NotificationsEnabled]:!1,[h.RefreshRate]:5,[h.SortDirection]:h.SortAscending,[h.SortMode]:h.SortByName};var Te=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=D("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),t.confirm.remove(),delete t.confirm,t}};var Ce=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))z(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&&z(t,e.enabled)}_create(){let e=document.createElement("div");e.role="menu",e.classList.add("context-menu","popup");let t={},r=(s,i=!1)=>{let a=document.createElement("div"),c=this.action_manager.text(s);a.role="menuitem",i?a.classList.add("context-menuitem","warning"):a.classList.add("context-menuitem"),a.dataset.action=s,a.textContent=c;let l=this.action_manager.keyshortcuts(s);l&&a.setAttribute("aria-keyshortcuts",l),a.addEventListener("click",()=>{this.action_manager.click(s),this.close()}),t[s]=a,e.append(a)},n=()=>{let s=document.createElement("div");s.classList.add("context-menu-separator"),e.append(s)};return r("resume-selected-torrents"),r("resume-selected-torrents-now"),r("pause-selected-torrents"),n(),r("move-top"),r("move-up"),r("move-down"),r("move-bottom"),n(),r("remove-selected-torrents",!0),r("trash-selected-torrents",!0),n(),r("verify-selected-torrents"),r("show-move-dialog"),r("show-rename-dialog"),r("show-labels-dialog"),n(),r("reannounce-selected-torrents"),n(),r("select-all"),r("deselect-all"),{actions:t,root:e}}};var Bt=new Intl.PluralRules,O=Bt.resolvedOptions().locale,Ao=new Intl.NumberFormat(O),et=1e3,Do=[new Intl.NumberFormat(O,{maximumFractionDigits:0,style:"unit",unit:"byte"}),new Intl.NumberFormat(O,{maximumFractionDigits:0,style:"unit",unit:"kilobyte"}),new Intl.NumberFormat(O,{maximumFractionDigits:0,style:"unit",unit:"megabyte"}),new Intl.NumberFormat(O,{maximumFractionDigits:2,style:"unit",unit:"gigabyte"}),new Intl.NumberFormat(O,{maximumFractionDigits:2,style:"unit",unit:"terabyte"}),new Intl.NumberFormat(O,{maximumFractionDigits:2,style:"unit",unit:"petabyte"})],Po=new Intl.NumberFormat(O,{maximumFractionDigits:2,style:"unit",unit:"kilobyte-per-second"}),Ro=new Intl.NumberFormat(O,{maximumFractionDigits:2,style:"unit",unit:"megabyte-per-second"}),w={_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 Do){if(e<et)return t.format(e);e/=et}return"E2BIG"},ngettext(o,e,t){return Bt.select(t)==="one"?o:e},number(o){return Ao.format(o)},percentString(o){let e=o<100?1:0;return this._toTruncFixed(o,e)},ratioString(o){return o===-1?"None":o===-2?"&infin;":this.percentString(o)},size(o){return this.mem(o)},speed(o){return o<999.95?Po.format(o):Ro.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){let e=Math.floor(o/86400);if(e)return this.countString("day","days",e);let t=Math.floor(o%86400/3600);if(t)return this.countString("hour","hours",t);let r=Math.floor(o%3600/60);return r?this.countString("minute","minutes",r):(o=Math.floor(o%60),this.countString("second","seconds",o))},timestamp(o){if(!o)return"N/A";let e=new Date(o*1e3),t=new Date,r="",n="",s=t.getFullYear()===e.getFullYear(),i=t.getMonth()===e.getMonth(),a=t.getDate()-e.getDate();s&&i&&Math.abs(a)<=1?a===0?r="Today":a===1?r="Yesterday":r="Tomorrow":r=e.toDateString();let c=e.getHours(),l="AM";c>12&&(c=c-12,l="PM"),c===0&&(c=12),c<10&&(c=`0${c}`);let m=e.getMinutes();return m<10&&(m=`0${m}`),o=e.getSeconds(),o<10&&(o=`0${o}`),n=[c,m,o].join(":"),[r,n,l].join(" ")},toKBps(o){return Math.floor(o/et)}};var Le=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()),z(e.checkbox,this.isEditable()),e.checkbox.checked=this.fields.isWanted}refreshProgressHTML(){let{size:e,have:t}=this.fields,r=100*(e?t/e:1),n=w,s=`${n.size(t)} of ${n.size(e)} (${n.percentString(r)}%)`;f(this.elements.progress,s)}refresh(){let e=0,t=!1,r=!1,n=!1,s=0,i=!1,a=this.fields.torrent.getFiles();for(let c of this.fields.indices){let l=a[c];switch(e+=l.bytesCompleted,s+=l.length,i|=l.wanted,l.priority.toString()){case"-1":r=!0;break;case"1":t=!0;break;default:n=!0;break}}Se(this.elements.priority_low_button,r),Se(this.elements.priority_normal_button,n),Se(this.elements.priority_high_button,t),(this.fields.have!==e||this.fields.size!==s)&&(this.fields.have=e,this.fields.size=s,this.refreshProgressHTML()),this.fields.isWanted!==i&&(this.fields.isWanted=i,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,n){let s=document.createElement("li");s.classList.add("inspector-torrent-file-list-entry",n?"even":"odd"),this.elements.root=s;let i=document.createElement("input"),a=A();i.type="checkbox",i.className="file-wanted-control",i.title="Download file",i.id=a,i.addEventListener("change",m=>this.fireWantedChanged(m.target.checked)),s.checkbox=i,s.append(i),i=document.createElement("label"),i.className="inspector-torrent-file-list-entry-name",i.setAttribute("for",a),f(i,r),s.append(i),i=document.createElement("div"),i.className="inspector-torrent-file-list-entry-progress",s.append(i),this.elements.progress=i,i=document.createElement("div"),i.className="file-priority-radiobox";let c=i,l=m=>this.firePriorityChanged(m.target.value);i=document.createElement("input"),i.type="radio",i.value="-1",i.className="low",i.title="Low Priority",i.addEventListener("click",l),this.elements.priority_low_button=i,c.append(i),i=document.createElement("input"),i.type="radio",i.value="0",i.className="normal",i.title="Normal Priority",i.addEventListener("click",l),this.elements.priority_normal_button=i,c.append(i),i=document.createElement("input"),i.type="radio",i.value="1",i.title="High Priority",i.className="high",i.addEventListener("click",l),this.elements.priority_high_button=i,c.append(i),s.append(c),s.style.paddingLeft=`${t*20}px`,this.refresh()}getElement(){return this.elements.root}constructor(e,t,r,n,s){super(),this.fields={have:0,indices:n,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,s)}};var _=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 n=e[t];if(ye(n,r))return!1;let s=this.fieldObservers[t];if(e===this.fields&&s&&s.length>0)for(let i of s)i.call(this,r,n,t);return e[t]=r,!0}updateFiles(e){let t=!1,r=this.fields.files||[],n=["length","name","bytesCompleted","wanted","priority"];for(let[s,i]of e.entries()){let a=r[s]||{};for(let c of n)c in i&&(t|=this.setField(a,c,i[c]));r[s]=a}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,n]of Object.entries(e))switch(r){case"files":case"fileStats":t|=this.updateFiles(n);break;case"trackerStats":t|=this.setField(this.fields,"trackers",n);break;case"trackers":r in this.fields||(t|=this.setField(this.fields,r,n));break;case"name":this.setField(this.fields,r,e[r])&&(this.fields.collatedName="",t=!0);break;default:t|=this.setField(this.fields,r,n)}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 w.percentString(100*this.getPercentDone())}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 h.FilterActive:return this.getPeersGettingFromUs()>0||this.getPeersSendingToUs()>0||this.getWebseedsSendingToUs()>0||this.isChecking();case h.FilterSeeding:return t===o._StatusSeed||t===o._StatusSeedWait;case h.FilterDownloading:return t===o._StatusDownload||t===o._StatusDownloadWait;case h.FilterPaused:return this.isStopped();case h.FilterFinished:return this.isFinished();default:return!0}}test(e,t,r,n){let s=this.testState(e);if(s&&r&&(s=this.getCollatedName().includes(r.toLowerCase())),s){let i=this.getLabels();n.length>0&&(s=n.some(a=>i.includes(a)))}return s&&t&&t.length>0&&(s=this.getCollatedTrackers().includes(t)),s}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(),n=t.getUploadRatio();return r<n?1:r>n?-1:o.compareByState(e,t)}static compareByProgress(e,t){let r=e.getPercentDone(),n=t.getPercentDone();return r-n||o.compareByRatio(e,t)}static compareBySize(e,t){let r=e.getTotalSize(),n=t.getTotalSize();return r-n||o.compareByName(e,t)}static compareTorrents(e,t,r,n){let s=0;switch(r){case h.SortByActivity:s=o.compareByActivity(e,t);break;case h.SortByAge:s=o.compareByAge(e,t);break;case h.SortByQueue:s=o.compareByQueue(e,t);break;case h.SortByProgress:s=o.compareByProgress(e,t);break;case h.SortBySize:s=o.compareBySize(e,t);break;case h.SortByState:s=o.compareByState(e,t);break;case h.SortByRatio:s=o.compareByRatio(e,t);break;case h.SortByName:s=o.compareByName(e,t);break;default:console.log(`Unrecognized sort mode: ${r}`),s=o.compareByName(e,t);break}return n===h.SortDescending&&(s=-s),s}static sortTorrents(e,t,r){switch(t){case h.SortByActivity:e.sort(this.compareByActivity);break;case h.SortByAge:e.sort(this.compareByAge);break;case h.SortByName:e.sort(this.compareByName);break;case h.SortByProgress:e.sort(this.compareByProgress);break;case h.SortByQueue:e.sort(this.compareByQueue);break;case h.SortByRatio:e.sort(this.compareByRatio);break;case h.SortBySize:e.sort(this.compareBySize);break;case h.SortByState:e.sort(this.compareByState);break;default:console.log(`Unrecognized sort mode: ${t}`),e.sort(this.compareByName);break}return r===h.SortDescending&&e.reverse(),e}};_._StatusStopped=0;_._StatusCheckWait=1;_._StatusCheck=2;_._StatusDownloadWait=3;_._StatusDownload=4;_._StatusSeedWait=5;_._StatusSeed=6;_._RatioUseGlobal=0;_._RatioUseLocal=1;_._RatioUnlimited=2;_._ErrNone=0;_._ErrTrackerWarning=1;_._ErrTrackerError=2;_._ErrLocalError=3;_._TrackerInactive=0;_._TrackerWaiting=1;_._TrackerQueued=2;_._TrackerActive=3;_.Fields={};_.Fields.Metadata=["addedDate","file-count","name","primary-mime-type","totalSize"];_.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"];_.Fields.InfoExtra=["comment","creator","dateCreated","files","hashString","isPrivate","magnetLink","pieceCount","pieceSize"];_.Fields.StatsExtra=["activityDate","corruptEver","desiredAvailable","downloadedEver","fileStats","haveUnchecked","haveValid","peers","startDate","trackerStats"];var Mt=["encryption","speed-up","speed-down","percent-done","status","peer-address","peer-app-name"],Ae=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.outside=new j(this.elements.root),this.outside.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){this.outside.stop(),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=i=>{let a=document.createElement("div");a.textContent=i,a.classList.add("section-label"),e.append(a)},n=i=>{let a=document.createElement("label");f(a,i),e.append(a);let c=document.createElement("span");return e.append(c),c};r("Activity");let s=[["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[i,a]of s)t[i]=n(a);r("Details"),s=[["size","Size:"],["location","Location:"],["hash","Hash:"],["privacy","Privacy:"],["origin","Origin:"],["dateAdded","Date added:"],["magnetLink","Magnet:"],["comment","Comment:"],["labels","Labels:"]];for(let[i,a]of s)t[i]=n(a);return t}static _createListPage(e,t){let r=document.createElement("div"),n=document.createElement(e);return n.id=t,r.append(n),{list:n,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"),n=["","Up","Down","Done","Status","Address","Client"];for(let[i,a]of n.entries()){let c=document.createElement("th"),l=Mt[i];l==="encryption"&&(c.dataset.encrypted=!0),c.classList.add(l),f(c,a),r.append(c)}let s=document.createElement("tbody");return t.append(r),e.append(t),e.append(s),{root:e,tbody:s}}_create(){let e={files:o._createFilesPage(),info:o._createInfoPage(),peers:o._createPeersPage(),tiers:o._createTiersPage()},t=n=>{this.current_page=n,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 n of this.torrents)n.removeEventListener(t,r);this.torrents=[...e];for(let n of this.torrents)n.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(n=>n.getId());if(r&&r.length>0){let n=["id",..._.Fields.StatsExtra];o._needsExtraInfo(t)&&n.push(..._.Fields.InfoExtra),e.updateTorrents(r,n)}}_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",n=w,s=Date.now(),{elements:i,torrents:a}=this,c=a.reduce((p,d)=>p+d.getSizeWhenDone(),0),l=null;if(a.length===0)l=e;else if(a.every(p=>p.isFinished()))l="Finished";else if(a.every(p=>p.isStopped()))l="Paused";else{let p=u=>u.getStateString(),d=p(a[0]);l=a.every(u=>p(u)===d)?d:t}f(i.info.state,l);let m=l;if(a.length===0)l=e;else{let p=a.reduce((b,v)=>b+v.getHaveValid(),0),d=a.reduce((b,v)=>b+v.getHaveUnchecked(),0),u=a.reduce((b,v)=>b+v.getLeftUntilDone(),0),g=100*(c?(c-u)/c:1);l=n.percentString(g),d?l=`${n.size(p)} of ${n.size(c)} (${l}%), ${n.size(d)} Unverified`:u?l=`${n.size(p)} of ${n.size(c)} (${l}%)`:l=`${n.size(p)} (100%)`}if(f(i.info.have,n.stringSanitizer(l)),a.length===0)l=e;else if(c===0)l=e;else{let p=a.reduce((d,u)=>u.getHave()+u.getDesiredAvailable(),0);l=`${n.percentString(100*p/c)}%`}if(f(i.info.availability,n.stringSanitizer(l)),a.length===0)l=e;else{let p=a.reduce((u,g)=>u+g.getDownloadedEver(),0),d=a.reduce((u,g)=>u+g.getFailedEver(),0);l=d?`${n.size(p)} (+${n.size(d)} discarded after failed checksum)`:n.size(p)}if(f(i.info.downloaded,n.stringSanitizer(l)),a.length===0)l=e;else{let p=a.reduce((u,g)=>u+g.getUploadedEver(),0),d=a.reduce((u,g)=>u+g.getSizeWhenDone(),0)||a.reduce((u,g)=>u+g.getHaveValid(),0);l=`${n.size(p)} (Ratio: ${n.ratioString(V.ratio(p,d))})`}if(f(i.info.uploaded,l),a.length===0)l=e;else if(a.every(p=>p.isStopped()))l=m;else{let p=u=>u.getStartDate(),d=p(a[0]);l=a.every(u=>p(u)===d)?n.timeInterval(s/1e3-d):t}if(f(i.info.running_time,l),a.length===0)l=e;else{let p=u=>u.getETA(),d=p(a[0]);a.every(u=>p(u)===d)?d<0?l=r:l=n.timeInterval(d):l=t}if(f(i.info.remaining_time,l),a.length===0)l=e;else{let p=a.reduce((u,g)=>Math.max(u,g.getLastActivity()),-1),d=Math.floor(s/1e3);if(0<p&&p<=d){let u=d-p;l=u<5?"Active now":`${n.timeInterval(u)} ago`}else l=e}if(f(i.info.last_activity,l),a.length===0)l=e;else{let p=u=>u.getErrorString(),d=p(a[0]);l=a.every(u=>p(u)===d)?d:t}if(f(i.info.error,l||e),a.length===0)l=e;else{let p=a.reduce((d,u)=>d+u.getTotalSize(),0);if(p){let d=v=>v.getPieceSize(),u=a.reduce((v,E)=>v+E.getPieceCount(),0),g=n.number(u),b=d(a[0]);l=a.every(v=>d(v)===b)?`${n.size(p)} (${g} pieces @ ${n.mem(b)})`:`${n.size(p)} (${g} pieces)`}else l="None"}if(f(i.info.size,n.stringSanitizer(l)),a.length===0)l=e;else{let p=u=>u.getHashString(),d=p(a[0]);l=a.every(u=>p(u)===d)?d:t}if(f(i.info.hash,l),a.length===0)l=e;else{let p=u=>u.getPrivateFlag(),d=p(a[0]);a.every(u=>p(u)===d)?d?l="Private to this tracker -- DHT and PEX disabled":l="Public torrent":l=t}if(f(i.info.privacy,l),a.length===0)l=e;else{let p=u=>u.getComment(),d=p(a[0]);l=a.every(u=>p(u)===d)?d:t}if(l=l||e,l.startsWith("https://")||l.startsWith("http://")?(l=encodeURI(l),V.setInnerHTML(i.info.comment,`<a href="${l}" target="_blank" >${l}</a>`)):f(i.info.comment,l),l=a.length===0?e:a[0].getLabels().join(", "),f(i.info.labels,l),a.length===0)l=e;else{let p=x=>x.getCreator(),d=p(a[0]),u=!a.every(x=>p(x)===d);p=x=>x.getDateCreated();let g=p(a[0]),b=!a.every(x=>p(x)===g),v=!d||d.length===0,E=!g;u||b?l=t:v&&E?l=r:E&&!v?l=`Created by ${d}`:v&&!E?l=`Created on ${new Date(g*1e3).toDateString()}`:l=`Created by ${d} on ${new Date(g*1e3).toDateString()}`}if(f(i.info.origin,l),a.length===0)l=e;else{let p=u=>u.getDownloadDir(),d=p(a[0]);l=a.every(u=>p(u)===d)?d:t}if(f(i.info.location,l),a.length===0)l=e;else{let p=u=>u.getDateAdded(),d=p(a[0]);l=a.every(u=>p(u)===d)?new Date(d*1e3).toDateString():t}if(f(i.info.dateAdded,l),a.length===0)f(i.info.magnetLink,e);else if(a.length>1)f(i.info.magnetLink,t);else{let p=a[0].getMagnetLink();V.setInnerHTML(i.info.magnetLink,`<a class="inspector-info-magnet" href="${p}"><button></button></a>`)}}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=w,{elements:t,torrents:r}=this,{tbody:n}=t.peers,s=[(a,c)=>{c.dataset.encrypted=a.isEncrypted},(a,c)=>f(c,a.rateToPeer?e.speedBps(a.rateToPeer):""),(a,c)=>f(c,a.rateToClient?e.speedBps(a.rateToClient):""),(a,c)=>f(c,`${Math.floor(a.progress*100)}%`),(a,c)=>{f(c,a.flagStr),c.setAttribute("title",o._peerStatusTitle(a.flagStr))},(a,c)=>f(c,a.address),(a,c)=>f(c,a.clientName)],i=[];for(let a of r){let c=document.createElement("tr");c.classList.add("torrent-row");let l=document.createElement("td");l.setAttribute("colspan",s.length),f(l,a.getName()),c.append(l),i.push(c);for(let m of a.getPeers()){let p=document.createElement("tr");p.classList.add("peer-row");for(let[d,u]of s.entries()){let g=document.createElement("td");g.classList.add(Mt[d]),u(m,g),p.append(g)}i.push(p)}for(;n.firstChild;)n.firstChild.remove();n.append(...i)}}static getAnnounceState(e){switch(e.announceState){case _._TrackerActive:return"Announce in progress";case _._TrackerWaiting:{let t=Math.max(0,e.nextAnnounceTime-Date.now()/1e3);return`Next announce in ${w.timeInterval(t)}`}case _._TrackerQueued:return"Announce is queued";case _._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 n=w.timestamp(e.lastAnnounceTime);e.lastAnnounceSucceeded?r=[n," (got ",w.countString("peer","peers",e.lastAnnouncePeerCount),")"]:(t="Announce error",r=[e.lastAnnounceResult?`${e.lastAnnounceResult} - `:"",n])}return{label:t,value:r.join("")}}static lastScrapeStatus(e){let t="Last Scrape",r="N/A";if(e.hasScraped){let n=w.timestamp(e.lastScrapeTime);e.lastScrapeSucceeded?r=n:(t="Scrape error",r=(e.lastScrapeResult?`${e.lastScrapeResult} - `:"")+n)}return{label:t,value:r}}static _getOrigin(e){try{let t="udp://";if(e.announce.startsWith(t)){let n="http://",s=e.announce.replace(t,n);return new URL(s).origin.replace(n,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,n=[];for(let s of r){let i=document.createElement("div");if(i.classList.add("inspector-group"),n.push(i),r.length>1){let a=document.createElement("div");a.classList.add("tier-list-torrent"),f(a,s.getName()),n.push(a)}for(let[a,c]of s.getTrackers().entries()){let l=o.getAnnounceState(c),m=o.lastAnnounceStatus(c),p=o.lastScrapeStatus(c),d=document.createElement("div");d.classList.add("tier-list-row",a%2?"odd":"even");let u=document.createElement("div"),g=o._getOrigin(c);u.classList.add("tier-list-tracker"),f(u,`${g} - tier ${c.tier+1}`),u.setAttribute("title",c.announce),d.append(u),u=document.createElement("div"),u.classList.add("tier-announce"),f(u,`${m.label}: ${m.value}`),d.append(u),u=document.createElement("div"),u.classList.add("tier-seeders"),f(u,`Seeders: ${c.seederCount>-1?c.seederCount:e}`),d.append(u),u=document.createElement("div"),u.classList.add("tier-state"),f(u,l),d.append(u),u=document.createElement("div"),u.classList.add("tier-leechers"),f(u,`Leechers: ${c.leecherCount>-1?c.leecherCount:e}`),d.append(u),u=document.createElement("div"),u.classList.add("tier-scrape"),f(u,`${p.label}: ${p.value}`),d.append(u),u=document.createElement("div"),u.classList.add("tier-downloads"),f(u,`Downloads: ${c.downloadCount>-1?c.downloadCount:e}`),d.append(u),n.push(d)}}for(;t.firstChild;)t.firstChild.remove();t.append(...n)}_changeFileCommand(e,t){let{controller:r,file_torrent:n}=this,s=n.getId();r.changeFileCommand(s,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,n=null;switch(r.toString()){case"-1":n="priority-low";break;case"1":n="priority-high";break;default:n="priority-normal";break}this._changeFileCommand(t,n)}_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[n,s]of e.getFiles().entries()){let{name:i}=s,a=i.split("/"),c=r;for(let[l,m]of a.entries()){let p=c.children[m];p||(c.children[m]=p={children:{},depth:l,file_indices:[],name:m,parent:c}),c=p}c.file_index=n,delete c.children,t.push(c)}for(let n of t){let{file_index:s}=n,i=n;do i.file_indices.push(s),i=i.parent;while(i)}return r}addNodeToView(e,t,r,n){let s=new Le(e,r.depth,r.name,r.file_indices,n%2);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,n){if(r.parent&&this.addNodeToView(e,t,r,n++),r.children)for(let s of Object.values(r.children))n=this.addSubtreeToView(e,t,s,n);return n}_updateFiles(){let{list:e}=this.elements.files,{file_rows:t,file_torrent:r,file_torrent_n:n,torrents:s}=this;if(s.length!==1){this._clearFileList();return}let[i]=s,a=i.getFiles().length;if(i!==r||a!==n){this._clearFileList(),this.file_torrent=i,this.file_torrent_n=a,this.file_rows=[];let c=document.createDocumentFragment(),l=o.createFileTreeModel(i);this.addSubtreeToView(i,c,l,0),e.append(c)}else for(let c of t)c.refresh()}};var De=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=D("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 Y=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,n=D("confirm-dialog");return n.confirm.remove(),delete n.confirm,n.heading.textContent=t,n.workarea.textContent=r,n}};var ie=class extends EventTarget{constructor(e,t,r=""){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()),this._updateFreeSpaceInAddDialog(),document.body.append(this.elements.root),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)=>{if(!this.closed){let n=r>0?`${w.size(r)} Free`:"";this.elements.freespace.textContent=n}})}_onConfirm(){let{controller:e,elements:t,remote:r}=this,{file_input:n,folder_input:s,start_input:i,url_input:a}=t,c=!i.checked,l=s.value.trim();for(let p of n.files){let d=new FileReader;d.addEventListener("load",u=>{let g=u.target.result,b="base64,",v=g.indexOf(b);if(v===-1)return;let E={arguments:{"download-dir":l,metainfo:g.slice(Math.max(0,v+b.length)),paused:c},method:"torrent-add"};r.sendRequest(E,x=>{x.result!=="success"&&(alert(`Error adding "${p.name}": ${x.result}`),e.setCurrentPopup(new Y({heading:`Error adding "${p.name}"`,message:x.result})))})}),d.readAsDataURL(p)}let m=a.value.trim();if(m.length>0){/^[\da-f]{40}$/i.test(m)&&(m=`magnet:?xt=urn:btih:${m}`);let p={arguments:{"download-dir":l,filename:m,paused:c},method:"torrent-add"};r.sendRequest(p,d=>{d.result!=="success"&&e.setCurrentPopup(new Y({heading:`Error adding "${m}"`,message:d.result}))})}this._onDismiss()}_create(e){let t=D(),{confirm:r,root:n,heading:s,workarea:i}=t;n.classList.add("open-torrent"),s.textContent="Add Torrents",r.textContent="Add";let a=A(),c=document.createElement("label");c.setAttribute("for",a),c.textContent="Please select torrent files to add:",i.append(c);let l=document.createElement("input");l.type="file",l.name="torrent-files[]",l.id=a,l.multiple="multiple",i.append(l),t.file_input=l,a=A(),c=document.createElement("label"),c.setAttribute("for",a),c.textContent="Or enter a URL:",i.append(c),l=document.createElement("input"),l.type="url",l.id=a,l.value=e,i.append(l),t.url_input=l,l.addEventListener("keyup",({key:u})=>{u==="Enter"&&r.click()}),a=A(),c=document.createElement("label"),c.id="add-dialog-folder-label",c.for=a,c.textContent="Destination folder: ",i.append(c);let m=document.createElement("span");m.id="free-space-text",c.append(m),i.append(c),t.freespace=m,l=document.createElement("input"),l.type="text",l.id="add-dialog-folder-input",l.addEventListener("change",()=>this._updateFreeSpaceInAddDialog()),l.value=this.controller.session_properties["download-dir"],i.append(l),t.folder_input=l;let p=document.createElement("div");i.append(p);let d=document.createElement("input");return d.type="checkbox",d.id="auto-start-check",d.checked=this.controller.shouldAddedTorrentsStart(),p.append(d),t.start_input=d,c=document.createElement("label"),c.id="auto-start-label",c.setAttribute("for",d.id),c.textContent="Start when added",p.append(c),t}};var C={_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:"../rpc",_TurtleDownSpeedLimit:"alt-speed-down",_TurtleState:"alt-speed-enabled",_TurtleUpSpeedLimit:"alt-speed-up",_UpSpeedLimit:"speed-limit-up",_UpSpeedLimited:"speed-limit-up-enabled"},ae=class o{constructor(e){this._controller=e,this._error="",this._session_id=""}sendRequest(e,t,r){let n=new Headers;n.append("cache-control","no-cache"),n.append("content-type","application/json"),n.append("pragma","no-cache"),this._session_id&&n.append(o._SessionHeader,this._session_id);let s=null;fetch(C._Root,{body:JSON.stringify(e),headers:n,method:"POST"}).then(i=>{if(s=i,i.status===409){let a=new Error(o._SessionHeader);throw a.header=i.headers.get(o._SessionHeader),a}return i.json()}).then(i=>{t&&t.call(r,i,s)}).catch(i=>{if(i.message===o._SessionHeader){this._session_id=i.header,this.sendRequest(e,t,r);return}console.trace(i),this._controller.togglePeriodicSessionRefresh(!1),this._controller.setCurrentPopup(new Y({heading:"Connection failed",message:"Could not connect to the server. You may need to reload the page to reconnect."}))})}loadDaemonPrefs(e,t){let r={method:"session-get"};this.sendRequest(r,e,t)}checkPort(e,t){let r={method:"port-test"};this.sendRequest(r,e,t)}renameTorrent(e,t,r,n,s){let i={arguments:{ids:e,name:r,path:t},method:"torrent-rename-path"};this.sendRequest(i,n,s)}setLabels(e,t,r){let n={ids:e,labels:t};this.sendRequest({arguments:n,method:"torrent-set"},r)}loadDaemonStats(e,t){let r={method:"session-stats"};this.sendRequest(r,e,t)}updateTorrents(e,t,r,n){let s={arguments:{fields:t,format:"table"},method:"torrent-get"};e&&(s.arguments.ids=e),this.sendRequest(s,i=>{let a=i.arguments;r.call(n,a.torrents,a.removed)})}getFreeSpace(e,t,r){let n={arguments:{path:e},method:"free-space"};this.sendRequest(n,s=>{let i=s.arguments;t.call(r,i.path,i["size-bytes"])})}changeFileCommand(e,t,r){let n={ids:[e]};n[r]=t,this.sendRequest({arguments:n,method:"torrent-set"},()=>{this._controller.refreshTorrents([e])})}sendTorrentSetRequests(e,t,r,n,s){r||(r={}),r.ids=t;let i={arguments:r,method:e};this.sendRequest(i,n,s)}sendTorrentActionRequests(e,t,r,n){this.sendTorrentSetRequests(e,t,null,r,n)}startTorrents(e,t,r,n){let s=t?"torrent-start-now":"torrent-start";this.sendTorrentActionRequests(s,e,r,n)}stopTorrents(e,t,r){this.sendTorrentActionRequests("torrent-stop",e,t,r)}moveTorrents(e,t,r,n){this.sendTorrentSetRequests("torrent-set-location",e,{location:t,move:!0},r,n)}removeTorrents(e,t){let r={arguments:{"delete-local-data":t,ids:[]},method:"torrent-remove"};if(e)for(let n=0,s=e.length;n<s;++n)r.arguments.ids.push(e[n].getId());this.sendRequest(r,()=>{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(C._QueueMoveTop,e,t,r)}moveTorrentsToBottom(e,t,r){this.sendTorrentActionRequests(C._QueueMoveBottom,e,t,r)}moveTorrentsUp(e,t,r){this.sendTorrentActionRequests(C._QueueMoveUp,e,t,r)}moveTorrentsDown(e,t,r){this.sendTorrentActionRequests(C._QueueMoveDown,e,t,r)}};ae._SessionHeader="X-Transmission-Session-Id";function le(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 Nt(o,e,t,r){let n=document.createElement("button");return n.textContent=e,n.addEventListener("click",r),o.append(n),n.dataset.action=t,n}var ce=class extends EventTarget{constructor(e,t,r,n){super(),this.action_listener=this._onActionChange.bind(this),this.action_manager=n,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:s}=e;Object.assign(this,this._create(s)),this.outside=new j(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[C._TurtleState]}_onPrefsChange(e){switch(e.key){case h.SortDirection:case h.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),z(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={},n=this._onClick.bind(this),s=document.createElement("div");s.classList.add("overflow-menu","popup");let i=le("display","Display");s.append(i);let a=document.createElement("div");a.id="display-options",i.append(a);let c=document.createElement("div");c.classList.add("table-row"),a.append(c);let l=document.createElement("label");l.id="display-sort-mode-label",l.textContent="Sort by",c.append(l);let m=document.createElement("select");m.id="display-sort-mode-select",m.dataset.pref=h.SortMode,c.append(m);let p=[[h.SortByActivity,"Activity"],[h.SortByAge,"Age"],[h.SortByName,"Name"],[h.SortByProgress,"Progress"],[h.SortByQueue,"Queue order"],[h.SortByRatio,"Ratio"],[h.SortBySize,"Size"],[h.SortByState,"State"]];for(let[k,S]of p){let U=document.createElement("option");U.value=k,U.textContent=S,m.append(U)}l.setAttribute("for",m.id),m.value=this.prefs.sort_mode,m.addEventListener("change",k=>{this.prefs.sort_mode=k.target.value}),c=document.createElement("div"),c.classList.add("table-row"),a.append(c);let d=document.createElement("input");d.id="display-sort-reverse-check",d.dataset.pref=h.SortDirection,d.type="checkbox",c.append(d),l=document.createElement("label"),l.id="display-sort-reverse-label",l.setAttribute("for",d.id),l.textContent="Reverse sort",c.append(l),d.checked=this.prefs.sort_direction!==h.SortAscending,d.addEventListener("input",k=>{this.prefs.sort_direction=k.target.checked?h.SortDescending:h.SortAscending}),c=document.createElement("div"),c.classList.add("table-row"),a.append(c);let u="toggle-compact-rows";d=document.createElement("input"),d.id="display-compact-check",d.dataset.action=u,d.type="checkbox",c.append(d),l=document.createElement("label"),l.id="display-compact-label",l.for=d.id,l.setAttribute("for",d.id),l.textContent=this.action_manager.text(u),c.append(l),d.checked=this.prefs.display_mode===h.DisplayCompact,d.addEventListener("input",k=>{let{checked:S}=k.target;this.prefs.display_mode=S?h.DisplayCompact:h.DisplayFull}),c=document.createElement("div"),c.classList.add("table-row","display-fullscreen-row"),a.append(c),d=document.createElement("input"),d.id="display-fullscreen-check",d.type="checkbox";let g=()=>document.fullscreenElement!==null;d.checked=g(),d.addEventListener("input",()=>{g()?document.exitFullscreen():document.body.requestFullscreen()}),document.addEventListener("fullscreenchange",()=>{d.checked=g()}),c.append(d),l=document.createElement("label"),l.id="display-fullscreen-label",l.for=d.id,l.setAttribute("for",d.id),l.textContent="Fullscreen",c.append(l),i=le("speed","Speed Limit"),s.append(i),a=document.createElement("div"),a.id="speed-options",i.append(a),c=document.createElement("div"),c.classList.add("speed-up"),a.append(c),l=document.createElement("label"),l.id="speed-up-label",l.textContent="Upload:",c.append(l);let b="Unlimited";m=document.createElement("select"),m.id="speed-up-select",c.append(m);let v=["50","100","250","500","1000","2500","5000","10000",b];for(let k of[...new Set(v).add(`${e[C._UpSpeedLimit]}`).values()].sort((S,U)=>S-U)){let S=document.createElement("option");S.value=k,S.textContent=k===b?b:w.speed(k),m.append(S)}l.setAttribute("for",m.id),m.value=e[C._UpSpeedLimited]?`${e[C._UpSpeedLimit]}`:b,m.addEventListener("change",k=>{let{value:S}=k.target;console.log(k),S===b?this.remote.savePrefs({[C._UpSpeedLimited]:!1}):this.remote.savePrefs({[C._UpSpeedLimited]:!0,[C._UpSpeedLimit]:Number.parseInt(S,10)})}),c=document.createElement("div"),c.classList.add("speed-down"),a.append(c),l=document.createElement("label"),l.id="speed-down-label",l.textContent="Download:",c.append(l),m=document.createElement("select"),m.id="speed-down-select",c.append(m);for(let k of[...new Set(v).add(`${e[C._DownSpeedLimit]}`).values()].sort((S,U)=>S-U)){let S=document.createElement("option");S.value=k,S.textContent=k===b?b:w.speed(k),m.append(S)}l.setAttribute("for",m.id),m.value=e[C._DownSpeedLimited]?`${e[C._DownSpeedLimit]}`:b,m.addEventListener("change",k=>{let{value:S}=k.target;console.log(k),S===b?this.remote.savePrefs({[C._DownSpeedLimited]:!1}):this.remote.savePrefs({[C._DownSpeedLimited]:!0,[C._DownSpeedLimit]:Number.parseInt(S,10)})}),c=document.createElement("div"),c.classList.add("alt-speed"),a.append(c),d=document.createElement("input"),d.id="alt-speed-check",d.type="checkbox",d.checked=e[C._TurtleState],d.addEventListener("change",k=>{this.remote.savePrefs({[C._TurtleState]:k.target.checked})}),c.append(d),r.alt_speed_check=d,l=document.createElement("label"),l.id="alt-speed-image",l.setAttribute("for",d.id),c.append(l),l=document.createElement("label"),l.id="alt-speed-label",l.setAttribute("for",d.id),l.textContent="Use Temp limits",c.append(l),l=document.createElement("label"),l.id="alt-speed-values-label",l.setAttribute("for",d.id);let E=w.speed(e[C._TurtleUpSpeedLimit]),x=w.speed(e[C._TurtleDownSpeedLimit]);l.textContent=`(${E} up, ${x} down)`,c.append(l),i=le("actions","Actions"),s.append(i);for(let k of["show-preferences-dialog","pause-all-torrents","start-all-torrents"]){let S=this.action_manager.text(k);t[k]=Nt(i,S,k,n)}i=le("info","Info"),s.append(i),a=document.createElement("div"),i.append(a);for(let k of["show-about-dialog","show-shortcuts-dialog","show-statistics-dialog"]){let S=this.action_manager.text(k);t[k]=Nt(a,S,k,n)}i=le("links","Links"),s.append(i),a=document.createElement("ul"),i.append(a);let y=document.createElement("a");y.href="https://transmissionbt.com/",y.tabindex="0",y.textContent="Homepage";let P=document.createElement("li");return P.append(y),a.append(P),y=document.createElement("a"),y.href="https://transmissionbt.com/donate/",y.tabindex="0",y.textContent="Tip Jar",P=document.createElement("li"),P.append(y),a.append(P),y=document.createElement("a"),y.href="https://github.com/transmission/transmission/",y.tabindex="0",y.textContent="Source Code",P=document.createElement("li"),P.append(y),a.append(P),this._updateElement=this._updateElement.bind(this),{actions:t,elements:r,root:s}}};var Pe=class o extends EventTarget{static _initTimeDropDown(e){for(let t=0;t<24*4;++t){let r=Number.parseInt(t/4,10),n=t%4*15,s=t*15,i=`${r}:${n||"00"}`;e.options[t]=new Option(i,s)}}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[n,s]=t[r];e.options[r]=new Option(n,s)}}_checkPort(){let e=this.elements.network.port_status_label;delete e.dataset.open,f(e,"Checking..."),this.remote.checkPort(this._onPortChecked,this)}_onPortChecked(e){let t=this.elements.network.port_status_label,r=e.arguments["port-is-open"];t.dataset.open=r,f(t,r?"Open":"Closed")}_setBlocklistButtonEnabled(e){let t=this.elements.peers.blocklist_update_button;z(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}}_onControlChanged(e){let{key:t}=e.target.dataset;this.remote.savePrefs({[t]:o._getValue(e.target)}),(t==="peer-port"||t==="port-forwarding-enabled")&&this._checkPort()}_onDialogClosed(){this.dispatchEvent(new Event("closed"))}_update(e){if(e){this._setBlocklistButtonEnabled(!0);for(let[t,r]of Object.entries(e))for(let n of this.elements.root.querySelectorAll(`[data-key="${t}"]`))if(t==="blocklist-size"){let s=w.number(r);n.innerHTML=`Blocklist has <span class="blocklist-size-number">${s}</span> rules`,f(this.elements.peers.blocklist_update_button,"Update")}else switch(n.type){case"checkbox":case"radio":n.checked!==r&&(n.checked=r,n.dispatchEvent(new Event("change")));break;case"text":case"textarea":case"url":case"email":case"number":case"search":n.value!=r&&n!==document.activeElement&&(n.value=r,n.dispatchEvent(new Event("change")));break;case"select-one":n.value!==r&&(n.value=r,n.dispatchEvent(new Event("change")));break;default:console.log(n.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 n=document.createElement("input");n.id=A(),n.type="checkbox",r.append(n);let s=document.createElement("label");return s.textContent=t,s.setAttribute("for",n.id),r.append(s),{check:n,label:s,root:r}}static _enableIfChecked(e,t){let r=()=>{e.tagName==="INPUT"?z(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=A(),r.dataset.key="download-dir",t.setAttribute("for",r.id),e.append(r);let n=r,s=o._createCheckAndLabel("incomplete-dir-div","Use temporary folder:");s.check.title="Separate folder to temporarily store downloads until they are complete.",s.check.dataset.key="incomplete-dir-enabled",s.label.title=s.check.title,e.append(s.root);let i=s.check;r=document.createElement("input"),r.type="text",r.dataset.key="incomplete-dir",e.append(r),o._enableIfChecked(r,s.check);let a=r;s=o._createCheckAndLabel("autostart-div","Start when added"),s.check.dataset.key="start-added-torrents",e.append(s.root);let c=s.check;s=o._createCheckAndLabel("suffix-div",`Append "part" to incomplete files' names`),s.check.dataset.key="rename-partial-files",e.append(s.root);let l=s.check;s=o._createCheckAndLabel("download-queue-div","Download queue size:"),s.check.dataset.key="download-queue-enabled",e.append(s.root);let m=s.check;r=document.createElement("input"),r.type="number",r.dataset.key="download-queue-size",e.append(r),o._enableIfChecked(r,s.check);let p=r;t=document.createElement("div"),t.textContent="Seeding",t.classList.add("section-label"),e.append(t),s=o._createCheckAndLabel("stop-ratio-div","Stop seeding at ratio:"),s.check.dataset.key="seedRatioLimited",e.append(s.root);let d=s.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,s.check);let u=r;s=o._createCheckAndLabel("stop-idle-div","Stop seeding if idle for N mins:"),s.check.dataset.key="idle-seeding-limit-enabled",e.append(s.root);let g=s.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,s.check);let b=r;t=document.createElement("div"),t.textContent="Magnet Protocol Handler",t.classList.add("section-label"),e.append(t);let v=document.createElement("button");return v.classList.add("register-handler-button"),o._updateProtocolHandlerButton(v),e.append(v),{autostart_check:c,download_dir:n,download_queue_check:m,download_queue_input:p,incomplete_dir_check:i,incomplete_dir_input:a,register_handler_button:v,root:e,stop_idle_check:g,stop_idle_input:b,stop_ratio_check:d,stop_ratio_input:u,suffix_check:l}}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 n=r.check,s=document.createElement("input");s.type="number",s.dataset.key="speed-limit-up",e.append(s),o._enableIfChecked(s,r.check);let i=s;r=o._createCheckAndLabel("download-speed-div","Download (kB/s):"),r.check.dataset.key="speed-limit-down-enabled",e.append(r.root);let a=r.check;s=document.createElement("input"),s.type="number",s.dataset.key="speed-limit-down",e.append(s),o._enableIfChecked(s,r.check);let c=s;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),s=document.createElement("input"),s.type="number",s.dataset.key="alt-speed-up",s.id=A(),t.setAttribute("for",s.id),e.append(s);let l=s;t=document.createElement("label"),t.textContent="Download (kB/s):",e.append(t),s=document.createElement("input"),s.type="number",s.dataset.key="alt-speed-down",s.id=A(),t.setAttribute("for",s.id),e.append(s);let m=s;r=o._createCheckAndLabel("alt-times-div","Scheduled times"),r.check.dataset.key="alt-speed-time-enabled",e.append(r.root);let p=r.check;t=document.createElement("label"),t.textContent="From:",o._enableIfChecked(t,r.check),e.append(t);let d=document.createElement("select");d.id=A(),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=A(),d.dataset.key="alt-speed-time-end",o._initTimeDropDown(d),t.setAttribute("for",d.id),e.append(d),o._enableIfChecked(d,r.check);let g=d;return t=document.createElement("label"),t.textContent="On days:",o._enableIfChecked(t,r.check),e.append(t),d=document.createElement("select"),d.id=A(),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:m,alt_from_select:u,alt_times_check:p,alt_to_select:g,alt_upload_speed_input:l,download_speed_check:a,download_speed_input:c,root:e,upload_speed_check:n,upload_speed_input:i}}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=A(),t.setAttribute("for",r.id),e.append(r);let n=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=A(),t.setAttribute("for",r.id),e.append(r);let s=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 i=document.createElement("select");i.id=A(),i.dataset.key="encryption",i.options[0]=new Option("Prefer encryption","preferred"),i.options[1]=new Option("Allow encryption","tolerated"),i.options[2]=new Option("Require encryption","required"),e.append(i);let a=i,c=o._createCheckAndLabel("use-pex-div","Use PEX to find more peers");c.check.title="PEX is a tool for exchanging peer lists with the peers you're connected to.",c.check.dataset.key="pex-enabled",c.label.title=c.check.title,e.append(c.root);let l=c.check;c=o._createCheckAndLabel("use-dht-div","Use DHT to find more peers"),c.check.title="DHT is a tool for finding peers without a tracker.",c.check.dataset.key="dht-enabled",c.label.title=c.check.title,e.append(c.root);let m=c.check;c=o._createCheckAndLabel("use-lpd-div","Use LPD to find more peers"),c.check.title="LPD is a tool for finding peers on your local network.",c.check.dataset.key="lpd-enabled",c.label.title=c.check.title,e.append(c.root);let p=c.check;t=document.createElement("div"),t.textContent="Blocklist",t.classList.add("section-label"),e.append(t),c=o._createCheckAndLabel("blocklist-enabled-div","Enable blocklist:"),c.check.dataset.key="blocklist-enabled",e.append(c.root);let d=c.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,c.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,c.check),e.append(t);let g=document.createElement("button");return g.classList.add("blocklist-update-button"),g.textContent="Update",e.append(g),o._enableIfChecked(g,c.check),{blocklist_enabled_check:d,blocklist_update_button:g,blocklist_url_input:u,dht_check:m,encryption_select:a,lpd_check:p,max_peers_overall_input:s,max_peers_per_torrent_input:n,pex_check:l,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=A(),t.setAttribute("for",r.id),e.append(r);let n=r,s=document.createElement("div");s.classList.add("port-status"),t=document.createElement("label"),t.textContent="Port is",s.append(t);let i=document.createElement("label");i.textContent="?",i.classList.add("port-status-label"),s.append(i),e.append(s);let a=o._createCheckAndLabel("randomize-port","Randomize port on launch");a.check.dataset.key="peer-port-random-on-start",e.append(a.root);let c=a.check;a=o._createCheckAndLabel("port-forwarding","Use port forwarding from my router"),a.check.dataset.key="port-forwarding-enabled",e.append(a.root);let l=a.check;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),a=o._createCheckAndLabel("utp-enabled","Enable uTP for peer communication"),a.check.dataset.key="utp-enabled",e.append(a.root);let m=a.check;t=document.createElement("div"),t.textContent="Default Public Trackers",t.classList.add("section-label"),e.append(t);let p=["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 g of p)t=document.createElement("label"),t.classList.add("default-trackers-label"),t.textContent=g,t.setAttribute("for","default-trackers"),e.append(t);let d=document.createElement("textarea");return d.dataset.key="default-trackers",d.id="default-trackers",e.append(d),{default_trackers_textarea:d,port_forwarding_check:l,port_input:n,port_status_label:i,random_port_check:c,root:e,utp_check:m}}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_soon=()=>this._update(this.session_manager.session_properties),this.elements=o._create(),this.elements.peers.blocklist_update_button.addEventListener("click",s=>{f(s.target,"Updating blocklist..."),this.remote.updateBlocklist(),this._setBlocklistButtonEnabled(!1)}),this.elements.torrents.register_handler_button.addEventListener("click",s=>{o._toggleProtocolHandler(s.currentTarget)}),this.outside=new j(this.elements.root),this.outside.addEventListener("click",()=>this.close()),Object.seal(this);let r=this._onControlChanged.bind(this),n=s=>{for(let i of Object.values(s))if(i.tagName==="INPUT")switch(i.type){case"checkbox":case"radio":case"number":case"text":case"url":i.addEventListener("change",r);break;default:console.trace(`unhandled input: ${i.type}`);break}else(i.tagName==="TEXTAREA"||i.tagName==="SELECT")&&i.addEventListener("change",r)};n(this.elements.network),n(this.elements.peers),n(this.elements.speed),n(this.elements.torrents),this.session_manager.addEventListener("session-change",this.update_soon),this.update_soon(),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.update_soon),this.elements.root.remove(),dispatchEvent(new Event("close"));for(let e of Object.keys(this))this[e]=null;this.closed=!0}}};var Re=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:n}=o._createMessage(e),s=D("remove-dialog");return s.heading.textContent=r,s.message.textContent=n,s.confirm.textContent=t?"Trash":"Remove",s}static _createMessage(e){let t=null,r=null,{torrents:n,trash:s}=e,[i]=n;return s&&n.length===1?(t=`Remove ${i.getName()} and delete data?`,r="All data downloaded for this torrent will be deleted. Are you sure you want to remove it?"):s?(t=`Remove ${n.length} transfers and delete data?`,r="All data downloaded for these torrents will be deleted. Are you sure you want to remove them?"):n.length===1?(t=`Remove ${i.getName()}?`,r="Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?"):(t=`Remove ${n.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 Ie=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,n=>{n.result==="success"&&e.refresh(n.arguments)}),this.close()}static _create(){let e=D("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 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();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(c=>c.getId()),{elements:n}=this,{entry:s}=n,{value:i}=s,a=i.split(/ *, */).filter(c=>c.length>0);t.setLabels(r,a,c=>{if(c.result==="success")for(let l of e)l.refresh({labels:a})}),this.close()}static _create(){let e=D("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 ze=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=D("shortcuts-dialog");t.root.setAttribute("aria-label","Keyboard Shortcuts");let r=document.createElement("table"),n=document.createElement("thead");r.append(n);let s=document.createElement("tr");n.append(s);let i=document.createElement("th");i.textContent="Key",s.append(i),i=document.createElement("th"),i.textContent="Action",s.append(i);let a=document.createElement("tbody");r.append(a);let c={};for(let[l,m]of e.allShortcuts().entries()){let p=l.split("+"),d=[p.pop(),...p].join("+");c[d]={name:m,shortcut:l}}for(let[,l]of Object.entries(c).sort()){let{name:m,shortcut:p}=l;s=document.createElement("tr"),a.append(s);let d=document.createElement("td");d.textContent=p.replaceAll("+"," + "),s.append(d),d=document.createElement("td"),d.textContent=e.text(m),s.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(n=>this._update(n.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=w,r=e["current-stats"],n=V.ratio(r.uploadedBytes,r.downloadedBytes);f(this.elements.session.up,t.size(r.uploadedBytes)),f(this.elements.session.down,t.size(r.downloadedBytes)),this.elements.session.ratio.innerHTML=t.ratioString(n),f(this.elements.session.time,t.timeInterval(r.secondsActive)),r=e["cumulative-stats"],n=V.ratio(r.uploadedBytes,r.downloadedBytes),f(this.elements.total.up,t.size(r.uploadedBytes)),f(this.elements.total.down,t.size(r.downloadedBytes)),this.elements.total.ratio.innerHTML=t.ratioString(n),f(this.elements.total.time,t.timeInterval(r.secondsActive))}static _create(){let e=D("statistics-dialog"),{confirm:t,dismiss:r,heading:n,root:s,workarea:i}=e;t.remove(),r.textContent="Close",delete e.confirm;let a="Statistics";s.setAttribute("aria-label",a),n.textContent=a;let c=["Uploaded:","Downloaded:","Ratio:","Running time:"],l=Ze("Current session",c),[m,p,d,u]=l.children,g=e.session={};g.up=m,g.down=p,g.ratio=d,g.time=u,i.append(l.root),l=Ze("Total",c);let[b,v,E,x]=l.children,y=e.total={};return y.up=b,y.down=v,y.ratio=E,y.time=x,i.append(l.root),e}};var R={formatDL:o=>`\u25BC${w.speedBps(o.getDownloadSpeed())}`,formatETA:o=>{let e=o.getETA();return e<0||e>=999*60*60?"":`ETA: ${w.timeInterval(e)}`},formatLabels:o=>o.getLabels().length>0?`\u{1F3F7} ${o.getLabels().join(", ")}`:"",formatUL:o=>`\u25B2${w.speedBps(o.getUploadSpeed())}`,getProgressInfo:(o,e)=>{let t=e.getStatus(),r=["torrent-progress-bar"],n=null;if(t===_._StatusStopped&&r.push("paused"),e.needsMetaData())r.push("magnet"),n=Math.round(e.getMetadataPercentComplete()*100);else if(t===_._StatusCheck)r.push("verify"),n=Math.round(e.getRecheckProgress()*100);else if(e.getLeftUntilDone()>0)r.push("leech"),n=Math.round(e.getPercentDone()*100);else{r.push("seed");let s=e.seedRatioLimit(o);n=s>0?e.getUploadRatio()*100/s:100}return e.isQueued()&&r.push("queued"),{classList:r,percent:n}},renderProgressbar:(o,e,t)=>{let r=R.getProgressInfo(o,e);t.className=r.classList.join(" "),t.style.setProperty("--progress",`${r.percent.toFixed(2)}%`)}},Be=class o{static getPeerDetails(e){let t=w,r=e.getErrorMessage();if(r)return r;if(e.isDownloading()){let n=e.getPeersConnected(),s=e.getWebseedsSendingToUs();return s&&n?["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"and",t.countString("web seed","web seeds",s),"\u2013",R.formatDL(e),R.formatUL(e)].join(" "):s?["Downloading from",t.countString("web seed","web seeds",s),"\u2013",R.formatDL(e),R.formatUL(e)].join(" "):["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"\u2013",R.formatDL(e),R.formatUL(e)].join(" ")}return e.isSeeding()?["Seeding to",e.getPeersGettingFromUs(),"of",t.countString("peer","peers",e.getPeersConnected()),"-",R.formatUL(e)].join(" "):e.isChecking()?["Verifying local data (",w.percentString(100*e.getRecheckProgress()),"% tested)"].join(""):e.getStateString()}static getProgressDetails(e,t){if(t.needsMetaData()){let a="retrieving";t.isStopped()&&(a="needs");let c=100*t.getMetadataPercentComplete();return[`Magnetized transfer - ${a} metadata (`,w.percentString(c),"%)"].join("")}let r=t.getSizeWhenDone(),n=t.getTotalSize(),s=t.isDone()||t.isSeeding(),i=[];if(s?(n===r?i.push(w.size(n)):i.push(w.size(r)," of ",w.size(t.getTotalSize())," (",t.getPercentDoneStr(),"%)"),i.push(", uploaded ",w.size(t.getUploadedEver())," (Ratio ",w.ratioString(t.getUploadRatio()),")")):i.push(w.size(r-t.getLeftUntilDone())," of ",w.size(r)," (",t.getPercentDoneStr(),"%)"),!t.isStopped()&&(!s||t.seedRatioLimit(e)>0)){i.push(" - ");let a=t.getETA();a<0||a>=999*60*60?i.push("remaining time unknown"):i.push(w.timeInterval(t.getETA())," remaining")}return i.join("")}render(e,t,r){let n=t.isStopped(),s=r._name_container;f(s,t.getName()),s.classList.toggle("paused",n),s=r._labels_container,f(s,R.formatLabels(t)),R.renderProgressbar(e,t,r._progressbar),r._progressbar.classList.add("full");let i=t.getError()!==_._ErrNone;s=r._peer_details_container,s.classList.toggle("error",i),f(s,o.getPeerDetails(t)),s=r._progress_details_container,s.innerHTML=o.getProgressDetails(e,t),s=r._toggle_running_button,s.alt=n?"Resume":"Pause",s.dataset.action=n?"resume":"pause"}createRow(e){let t=document.createElement("li");t.className="torrent";let r=document.createElement("div");r.classList.add("icon"),r.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),r.dataset.iconMultifile=e.getFileCount()>1?"true":"false";let n=document.createElement("div");n.className="torrent-name";let s=document.createElement("div");s.className="torrent-labels";let i=document.createElement("div");i.className="torrent-peer-details";let a=document.createElement("div");a.classList.add("torrent-progress");let c=document.createElement("div");c.classList.add("torrent-progress-bar","full"),a.append(c);let l=document.createElement("a");l.className="torrent-pauseresume-button",a.append(l);let m=document.createElement("div");return m.className="torrent-progress-details",t.append(r),t.append(n),t.append(s),t.append(i),t.append(a),t.append(m),t._icon=r,t._name_container=n,t._labels_container=s,t._peer_details_container=i,t._progress_details_container=m,t._progressbar=c,t._toggle_running_button=l,t}},Me=class o{static getPeerDetails(e){let t=e.getErrorMessage();if(t)return t;if(e.isDownloading()){let r=e.getDownloadSpeed()>0,n=e.getUploadSpeed()>0;if(!n&&!r)return"Idle";let s=[`${R.formatETA(e)} `];return r&&s.push(R.formatDL(e)),n&&s.push(R.formatUL(e)),s.join(" ")}return e.isSeeding()?`Ratio: ${w.ratioString(e.getUploadRatio())}, ${R.formatUL(e)}`:e.getStateString()}render(e,t,r){let n=r._name_container;n.classList.toggle("paused",t.isStopped()),f(n,t.getName()),n=r._labels_container,f(n,R.formatLabels(t));let s=t.getError()!==_._ErrNone;n=r._details_container,n.classList.toggle("error",s),f(n,o.getPeerDetails(t)),R.renderProgressbar(e,t,r._progressbar),r._progressbar.classList.add("compact")}createRow(e){let t=document.createElement("div");t.classList.add("torrent-progress-bar","compact");let r=document.createElement("div");r.classList.add("icon"),r.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),r.dataset.iconMultifile=e.getFileCount()>1?"true":"false";let n=document.createElement("div");n.className="torrent-peer-details compact";let s=document.createElement("div");s.className="torrent-labels compact";let i=document.createElement("div");i.className="torrent-name compact";let a=document.createElement("li");return a.append(t),a.append(n),a.append(s),a.append(i),a.append(r),a.className="torrent compact",a._progressbar=t,a._details_container=n,a._labels_container=s,a._name_container=i,a}},Ne=class{constructor(e,t,r){this._view=e,this._torrent=r,this._element=e.createRow(r);let n=()=>this.render(t);this._torrent.addEventListener("dataChanged",n),n()}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 Oe=class o extends EventTarget{constructor(e,t,r){super(),this.action_manager=e,this.notifications=t,this.prefs=r,this.remote=new ae(this),this.addEventListener("torrent-selection-changed",s=>this.action_manager.update(s)),this.filterText="",this._torrents={},this._rows=[],this.dirtyTorrents=new Set,this.refilterSoon=H(()=>this._refilter(!1)),this.refilterAllSoon=H(()=>this._refilter(!0)),this.boundPopupCloseListener=this.popupCloseListener.bind(this),this.dispatchSelectionChangedSoon=H(()=>this._dispatchSelectionChanged(),200);for(let s of document.querySelectorAll("button[data-action]")){let{action:i}=s.dataset;z(s,this.action_manager.isEnabled(i)),s.addEventListener("click",()=>{this.action_manager.click(i)})}document.querySelector("#filter-tracker").addEventListener("change",s=>{this.setFilterTracker(s.target.value==="all"?null:s.target.value)}),this.action_manager.addEventListener("change",s=>{for(let i of document.querySelectorAll(`[data-action="${s.action}"]`))z(i,s.enabled)}),this.action_manager.addEventListener("click",s=>{switch(s.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 ie(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 Te(this.version_info));break;case"show-inspector":this.setCurrentPopup(new Ae(this));break;case"show-move-dialog":this.setCurrentPopup(new De(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 Pe(this,this.remote));break;case"show-shortcuts-dialog":this.setCurrentPopup(new ze(this.action_manager));break;case"show-statistics-dialog":this.setCurrentPopup(new Ue(this.remote));break;case"show-rename-dialog":this.setCurrentPopup(new Ie(this,this.remote));break;case"show-labels-dialog":this.setCurrentPopup(new Fe(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===h.DisplayCompact?h.DisplayFull:h.DisplayCompact;break;case"trash-selected-torrents":this._removeSelectedTorrents(!0);break;case"verify-selected-torrents":this._verifyTorrents(this.getSelectedTorrents());break;default:console.warn(`unhandled action: ${s.action}`)}});let n=document.querySelector("#filter-mode");n.value=this.prefs.filter_mode,n.addEventListener("change",s=>{this.prefs.filter_mode=s.target.value,this.refilterAllSoon()}),document.addEventListener("keydown",this._keyDown.bind(this)),document.addEventListener("keyup",this._keyUp.bind(this)),n=document.querySelector("#torrent-container"),n.addEventListener("click",()=>{this.popup&&this.popup.name!=="inspector"?this.setCurrentPopup(null):this._deselectAll()}),n.addEventListener("dragenter",o._dragenter),n.addEventListener("dragover",o._dragenter),n.addEventListener("drop",this._drop.bind(this)),this._setupSearchBox(),this.elements={torrent_list:document.querySelector("#torrent-list")},this.elements.torrent_list.addEventListener("contextmenu",s=>{let i=event.target;for(;i&&!i.classList.contains("torrent");)i=i.parentNode;let a=this._rows.find(u=>u.getElement()===i);a&&!a.isSelected()&&this._setSelectedRow(a);let c=new Ce(this.action_manager);this.setCurrentPopup(c);let m=document.querySelector("#torrent-container").getBoundingClientRect(),p=Math.min(s.x,m.x+m.width-c.root.clientWidth),d=Math.min(s.y,m.y+m.height-c.root.clientHeight);c.root.style.left=`${p>0?p:0}px`,c.root.style.top=`${d>0?d:0}px`,s.preventDefault()}),this.loadDaemonPrefs(),this._initializeTorrents(),this.refreshTorrents(),this.togglePeriodicSessionRefresh(!0),this.prefs.addEventListener("change",({key:s,value:i})=>this._onPrefChanged(s,i));for(let[s,i]of this.prefs.entries())this._onPrefChanged(s,i)}_openTorrentFromUrl(){setTimeout(()=>{let e=new URLSearchParams(window.location.search).get("addtorrent");if(e){this.setCurrentPopup(new ie(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(ye(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 h.DisplayMode:{this.torrentRenderer=t==="compact"?new Me:new Be,this.refilterAllSoon();break}case h.FilterMode:case h.SortDirection:case h.SortMode:this.refilterAllSoon();break;case h.RefreshRate:{clearInterval(this.refreshTorrentsInterval);let r=this.refreshTorrents.bind(this),n=Math.max(2,this.prefs.refresh_rate_sec)*1e3;this.refreshTorrentsInterval=setInterval(r,n);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.dispatchSelectionChangedSoon()}_selectRow(e){e.getElement().classList.add("selected"),this.dispatchSelectionChangedSoon()}_deselectRow(e){e.getElement().classList.remove("selected"),this.dispatchSelectionChangedSoon()}_selectAll(){for(let e of this.elements.torrent_list.children)e.classList.add("selected");this.dispatchSelectionChangedSoon()}_deselectAll(){for(let e of this.elements.torrent_list.children)e.classList.remove("selected");this.dispatchSelectionChangedSoon(),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),n=Math.min(t,r),s=Math.max(t,r);for(let i=n;i<=s;++i)this._selectRow(this._rows[i])}this.dispatchSelectionChangedSoon()}_dispatchSelectionChanged(){let e=[],t=[];for(let n of this._rows)(n.isSelected()?t:e).push(n.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.shitKey&&t.push("Shift"),t.push(e.key.length===1?e.key.toUpperCase():e.key),t.join("+")}_keyDown(e){let{ctrlKey:t,keyCode:r,metaKey:n,shiftKey:s,target:i}=e,a=i.matches("input");if(!a){let p=o._createKeyShortcutFromKeyboardEvent(e),d=this.action_manager.getActionForShortcut(p);if(d){e.preventDefault(),this.action_manager.click(d);return}}if(r===27&&this.popup){this.setCurrentPopup(null),e.preventDefault();return}let l=document.querySelector(".popup:not(.hidden)"),m=this._rows;if(!a&&!l&&!n&&!t){let p=r===16,d=r===38,u=r===40;if((d||u)&&m.length>0){let g=this._indexOfLastTorrent(),b=this._shift_index,v=0,E=m.length-1,x=g;u&&x+1<=E?++x:d&&x-1>=v&&--x;let y=m[x];b>=0?b<=g&&g<x||b>=g&&g>x?this._selectRow(y):(b>=g&&x>g||b<=g&&g>x)&&this._deselectRow(m[g]):s?this._selectRange(y):this._setSelectedRow(y),y&&(this._last_torrent_clicked=y.getTorrentId(),y.getElement().scrollIntoView(),e.preventDefault())}else p&&(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)))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.data.Transfer.types.filter(n=>["text/uri-list","text/plain"].contains(n)).pop();for(let n of e.dataTransfer.getData(r).split(`
`).map(s=>s.trim()).filter(s=>o._isValidURL(s)))this.remote.addTorrentByUrl(n,t);return 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){let t=e.currentTarget;this.dirtyTorrents.add(t.getId()),this.refilterSoon()}updateTorrents(e,t){this.remote.updateTorrents(e,t,(r,n)=>{let s=[],i=r.shift(),a={};for(let c of r){for(let[p,d]of i.entries())a[d]=c[p];let{id:l}=a,m=this._torrents[l];if(m){let p=m.needsMetaData();m.refresh(a),p&&!m.needsMetaData()&&s.push(l)}else m=this._torrents[l]=new _(a),m.addEventListener("dataChanged",this._onTorrentChanged.bind(this)),this.dirtyTorrents.add(l),(!("name"in m.fields)||!("status"in m.fields))&&s.push(l)}if(s.length>0){let c=["id",..._.Fields.Metadata,..._.Fields.Stats];this.updateTorrents(s,c),this.refilterSoon()}n&&(this._deleteTorrents(n),this.refilterSoon())})}refreshTorrents(){let e=["id",..._.Fields.Stats];this.updateTorrents("recently-active",e)}_initializeTorrents(){let e=["id",..._.Fields.Metadata,..._.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);return}if(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 Re({remote:this.remote,torrents:t,trash:e}))}_startSelectedTorrents(e){this._startTorrents(this.getSelectedTorrents(),e)}_startTorrents(e,t){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.remote.stopTorrents(o._getTorrentIds(e),this.refreshTorrents,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[C._TurtleState])}_updateStatusbar(){let e=w,t=this._getAllTorrents(),r=t.reduce((i,a)=>i+a.getUploadSpeed(),0),n=t.reduce((i,a)=>i+a.getDownloadSpeed(),0),s=e.countString("Transfer","Transfers",this._rows.length);f(document.querySelector("#speed-up-label"),e.speedBps(r)),f(document.querySelector("#speed-dn-label"),e.speedBps(n)),f(document.querySelector("#filter-count"),s)}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?'<option value="all">All</option>':'<option value="all" selected="selected">All</option>';for(let n of t)r+=`<option value="${n}"`,n===this.filterTracker&&(r+=' selected="selected"'),r+=`>${o._displayName(n)}</option>`;(!this.filterTrackersStr||this.filterTrackersStr!==r)&&(this.filterTrackersStr=r,document.querySelector("#filter-tracker").innerHTML=r)}sortRows(e){let t=e.map(n=>n.getTorrent()),r=e.reduce((n,s)=>(n[s.getTorrent().getId()]=s,n),{});_.sortTorrents(t,this.prefs.sort_mode,this.prefs.sort_direction);for(let[n,s]of t.entries())e[n]=r[s.getId()]}_refilter(e){let{sort_mode:t,sort_direction:r,filter_mode:n}=this.prefs,s=this.filterTracker,i=this.torrentRenderer,a=this.elements.torrent_list,c=null,l=null,m=/^labels:([\w,-\s]*)(.*)$/.exec(this.filterText);m?(c=m[2].trim(),l=m[1].split(",")):(c=this.filterText,l=[]);let p=()=>[...a.children].length,d=()=>[...a.children].reduce((L,I)=>L+I.classList.contains("selected")?1:0,0),u=p(),g=d();if(this._updateFilterSelect(),clearTimeout(this.refilterTimer),delete this.refilterTimer,e){for(;a.firstChild;)a.firstChild.remove();this._rows=[],this.dirtyTorrents=new Set(Object.keys(this._torrents))}let b=[],v=[];for(let L of this._rows)this.dirtyTorrents.has(L.getTorrentId())?v.push(L):b.push(L);for(let L of v)L.getElement().remove();let E=[];for(let L of v){let I=L.getTorrentId(),F=this._torrents[I];F&&F.test(n,s,c,l)&&E.push(L),this.dirtyTorrents.delete(I)}v=E;for(let L of this.dirtyTorrents.values()){let I=this._torrents[L];if(I&&I.test(n,s,c,l)){let F=new Ne(i,this,I),$e=F.getElement();$e.row=F,v.push(F),$e.addEventListener("click",this._onRowClicked.bind(this)),$e.addEventListener("dblclick",()=>this.action_manager.click("show-inspector"))}}this.sortRows(v);let x=[],y=b.length,P=v.length,k=document.createDocumentFragment(),S=0,U=0;for(;S!==y||U!==P;){let L=null;if(S===y?L=!1:U===P?L=!0:L=_.compareTorrents(b[S].getTorrent(),v[U].getTorrent(),t,r)<0,L)x.push(b[S++]);else{let I=v[U++],F=I.getElement();S===y?k.append(F):a.insertBefore(F,b[S].getElement()),x.push(I)}}a.append(k),this._rows=x,this.dirtyTorrents.clear();for(let[L,I]of x.map(F=>F.getElement()).entries()){let F=L%2===0;I.classList.toggle("even",F),I.classList.toggle("odd",!F)}this._updateStatusbar(),(g!==d()||u!==p())&&this.dispatchSelectionChangedSoon()}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:n}=r;e[n]=(e[n]||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 Io(){let o=new de,e=new h,t=new Ee(e),r=new Oe(o,t,e),n=H(()=>r.elements.torrent_list.scrollTo(0,1));window.addEventListener("load",n),window.addEventListener("orientationchange",n)}document.addEventListener("DOMContentLoaded",Io);})();
//# sourceMappingURL=transmission-app.js.map

Filemanager

Name Type Size Permission Actions
images Folder 0755
index.html File 9.24 KB 0644
transmission-app.css File 61.29 KB 0644
transmission-app.css.LEGAL.txt File 0 B 0644
transmission-app.css.map File 56.67 KB 0644
transmission-app.js File 110.5 KB 0644
transmission-app.js.LEGAL.txt File 467 B 0644
transmission-app.js.map File 379.95 KB 0644
Filemanager