fix bug #77 with setting dialog not showing up

This commit is contained in:
Martin Bjeldbak Madsen 2017-05-04 17:23:55 -04:00
parent fbd858e445
commit 6be11adec4
22 changed files with 60 additions and 413 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
*.bkp
*.vscode
node_modules
package.json

30
Gruntfile.js Normal file
View File

@ -0,0 +1,30 @@
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
my_target: {
files: {
'src/tr-web-control/script/system.min.js': ['src/tr-web-control/script/system.js'],
// 'src/tr-web-control/script/public.min.js': ['src/tr-web-control/script/public.js'],
// 'src/tr-web-control/script/clientDevice.min.js': ['src/tr-web-control/script/clientDevice.js'],
// 'src/tr-web-control/script/cookies.min.js': ['src/tr-web-control/script/cookies.js'],
// 'src/tr-web-control/script/system.mobile.min.js': ['src/tr-web-control/script/system.mobile.js'],
// 'src/tr-web-control/script/transmission.min.js': ['src/tr-web-control/script/transmission.js'],
// 'src/tr-web-control/script/transmission.torrents.min.js': ['src/tr-web-control/script/transmission.torrents.js']
}
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
// Default task(s).
grunt.registerTask('default', ['uglify']);
};

View File

@ -21,12 +21,12 @@
<script type="text/javascript" src="tr-web-control/script/easyui/plugins/jquery.datagrid.drophead.js"></script>
<!-- -->
<!-- 系统类库 -->
<script type="text/javascript" src="tr-web-control/script/public.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/cookies.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/clientDevice.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/transmission.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/transmission.torrents.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/system.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/public.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/cookies.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/clientDevice.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.torrents.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/system.min.js?v=20170504"></script>
<script type="text/javascript" src="tr-web-control/config.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/plugin.js?v=20170411"></script>
</head>

View File

@ -19,11 +19,11 @@
<script type="text/javascript" src="tr-web-control/script/jquery/mobile/jquery.mobile-1.3.2.min.js?v=20130913"></script>
<!-- -->
<!-- 系统类库 -->
<script type="text/javascript" src="tr-web-control/script/min/public.js?v=20130913"></script>
<script type="text/javascript" src="tr-web-control/script/min/cookies.js?v=20130913"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.js?v=20130913"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.torrents.js?v=20130913"></script>
<script type="text/javascript" src="tr-web-control/script/min/system.mobile.js?v=20130913"></script>
<script type="text/javascript" src="tr-web-control/script/min/public.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/cookies.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.torrents.min.js?v=20170411"></script>
<script type="text/javascript" src="tr-web-control/script/min/system.mobile.min.js?v=20170411"></script>
</head>
<body>
<!-- Home -->
@ -251,4 +251,4 @@
};
})();
</script>
</html>
</html>

View File

@ -1,4 +0,0 @@
var clientDevice=function(){var c={ie:0,gecko:0,webkit:0,khtml:0,opera:0,ver:null},b={ie:0,firefox:0,konq:0,opera:0,chrome:0,safari:0,ver:null},a={win:false,mac:false,xll:false,iPhone:false,iPod:false,iPad:false,android:false,nokiaN:false,winMobile:false,macMobile:false,wii:false,ps:false},d=navigator.userAgent;if(window.opera){c.ver=b.ver=window.opera.version();c.opera=b.opera=parseFloat(c.ver)}else if(/AppleWebKit\/(\S+)/.test(d)){c.ver=RegExp.$1;c.webkit=parseFloat(c.ver);if(/Chrome\/(\S+)/.test(d)){b.ver=
RegExp.$1;b.chrome=parseFloat(b.ver)}else if(/Version\/(\S+)/.test(d)){b.ver=RegExp.$1;b.safari=parseFloat(b.ver)}else{var e=1;e=c.webkit<100?1:c.webkit<312?1.2:c.webkit<412?1.3:2;b.safari=b.ver=e}}else if(/KHTML\/(\S+)/.test(d)||/Konquersor\/([^;]+)/.test(d)){c.ver=b.ver=RegExp.$1;c.khtml=b.kong=paresFloat(c.ver)}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(d)){c.ver=RegExp.$1;c.gecko=parseFloat(c.ver);if(/Firefox\/(\S+)/.test(d)){b.ver=RegExp.$1;b.firefox=parseFloat(b.ver)}}else if(/MSIE([^;]+)/.test(d)){b.ver=
RegExp.$1;b.firefox=parseFloat(b.ver)}b.ie=c.ie;b.opera=c.opera;e=navigator.platform;a.win=e.indexOf("Win")==0;a.mac=e.indexOf("Mac")==0;a.x11=e=="X11"||e.indexOf("Linux")==0;if(a.win)if(/Win(?:doms)?([^do]{2})\s?(\d+\.\d+)?/.test(d))if(RegExp.$1=="NT")switch(RegExp.$2){case "5.0":a.win="2000";break;case "5.1":a.win="XP";break;case "6.0":a.win="Vista";break;default:a.win="NT"}else a.win=RegExp.$1?"ME":RegExp.$1;a.iPhone=d.indexOf("iPhone")>-1;a.iPod=d.indexOf("iPod")>-1;a.iPad=d.indexOf("iPad")>-1;
a.android=d.indexOf("Android")>-1;a.nokiaN=d.indexOf("NokiaN")>-1;a.winMobile=a.win=="CE";a.macMobile=a.iPhone||a.iPod||a.iPad;a.wii=d.indexOf("Wii")>-1;a.ps=/playstation/i.test(d);return{engine:c,browser:b,system:a}}();if((clientDevice.system.iphone||clientDevice.system.ipod||clientDevice.system.nokiaN||clientDevice.system.winMobile||clientDevice.system.macMobile||clientDevice.system.android)&&location.search.getQueryString("devicetype")!="computer")location.href="index.mobile.html";

View File

@ -1,2 +0,0 @@
var cookies={get:function(e,f){for(var c=document.cookie.split("; "),d=c.length,a,b=0;b<d;b++)if(c[b].indexOf("&")>0){a=c[b].split("=");if(e==a[0]){c[b]=c[b].substr(e.length+1);d=c[b].split("&");c=d.length;b={};for(var g=0;g<c;g++){a=d[g].split("=");var h=unescape(a[1]);switch(h){case "true":b[a[0]]=true;break;case "false":b[a[0]]=false;break;default:b[a[0]]=h}if(f==a[0])return h}return b}}else{a=c[b].split("=");if(e==a[0])return unescape(a[1])}return null},set:function(e,f,c){var d=new Date;if(c==
undefined)c=0;d.setDate(d.getDate()+c);var a=f;switch(typeof f){case "object":case "function":a=[];for(var b in f)a.push(b+"="+escape(f[b]));a=a.join("&");break;default:a=escape(f)}document.cookie=e+"="+a+(c==0?"":"; expires="+d.toGMTString())},remove:function(e){this.set(e,"",-1)},all:function(){return document.cookie}};

View File

@ -1,10 +0,0 @@
String.prototype.getQueryString=function(b,a){if(a==undefined)a="&";var d;if(d=this.match(RegExp("(^|"+a+"|\\?)"+b+"=([^"+a+"]*)("+a+"|$)")))return unescape(d[2]);return null};String.prototype.right=function(b){return this.substr(-b)};
Number.prototype.formatNumber=function(b){this.fStr=function(d,c,g){if(d==""||d==undefined)return c==""||c==undefined?"":c;var e=s=r="",f;if(!g){d=d.split("").reverse().join("");c=c.split("").reverse().join("")}for(var h=j=0;h<c.length;h++,j++){s=d.charAt(j);if(s!=undefined){e=c.charAt(h);switch(e){case "#":r+=s;f=h;break;case "0":r=s||s==e?r+s:r+0;f=h;break;case ".":r+=s==e?s:(j--,e);break;case ",":r+=s==e?s:(j--,e);break;default:r+=e;j--}}}if(j!=d.length&&c.charAt(c.length-1)!="0"&&f!=c.length&&
c.charAt(f)!="0")r=r.substr(0,f+1)+d.substr(j)+r.substr(f+1);r=(g?r:r.split("").reverse().join("")).replace(/(^,)|(,$)|(,,+)/g,"");if(r.substr(0,1)==",")r=r.substr(1);if(r.substr(0,2)=="-,")r="-"+r.substr(2);return r};var a=this.toString();if(a.length==0)return"";if(b==undefined)return this;b=b.split(".");a=a.split(".");return b.length>1?this.fStr(a[0],b[0])+"."+this.fStr(a[1],b[1],1):this.fStr(a[0],b[0])};
function getLocalTime(b){return(new Date(parseInt(b)*1E3)).toLocaleString().replace(/年|月/g,"-").replace(/日/g," ")}function formatLongTime(b){b=new Date(parseInt(b)*1E3);return formatDate(b)}
function formatDate(b,a){a||(a="yyyy-mm-dd hh:nn:ss");if(b instanceof Date){var d=b.getFullYear(),c=d.toString().substring(2),g=b.getMonth()+1,e=g<10?"0"+g:g,f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][g],h=b.getDate(),m=h<10?"0"+h:h,i=b.getHours(),n=i<10?"0"+i:i,k=b.getMinutes(),o=k<10?"0"+k:k,l=b.getSeconds(),p=l<10?"0"+l:l;a=a.replace(/yyyy/i,d);a=a.replace(/yy/i,c);a=a.replace(/mmm/i,f);a=a.replace(/mm/i,e);a=a.replace(/m/i,g);a=a.replace(/dd/i,m);a=a.replace(/d/i,
h);a=a.replace(/hh/i,n);a=a.replace(/h/i,i);a=a.replace(/nn/i,o);a=a.replace(/n/i,k);a=a.replace(/ss/i,p);return a=a.replace(/s/i,l)}else return""}
function formatSize(b,a,d){if(b==0)return a==true?"":d=="speed"?"0.00 KB/s":"0.00";a="";var c="KB";if(b<1024E3){a=b/1024;c="KB"}else if(b<1048576E3){a=b/1048576;c="MB"}else if(b<1073741824E3){a=b/1073741824;c="GB"}else if(b<1099511627776E3){a=b/1099511627776;c="TB"}else{a=b/1125899906842624;c="PB"}if(d=="speed")c+="/s";return a.formatNumber("###,###,###,###.00 ")+c}function getHoursFromMinutes(b){return("00"+parseInt(b/60,10)).right(2)+":"+("00"+b%60).right(2)}
function getMinutesFromHours(b){return parseInt(b.split(":")[0],10)*60+parseInt(b.split(":")[1],10)}function getTotalTime(b,a){a||(a="%dd %hh %mm %ss");var d=Math.floor(b/864E5),c=b%864E5,g=Math.floor(c/36E5),e=c%36E5;c=Math.floor(e/6E4);e=Math.round(e%6E4/1E3);var f=a;f=d==0?f.replace(/(%d+\s)/,""):f.replace("%d",d);f=g==0?f.replace(/(%h+\s)/,""):f.replace("%h",g);f=c==0?f.replace(/(%m+\s)/,""):f.replace("%m",c);return f=e==0?f.replace(/(%s+\s)/,""):f.replace("%s",e)}
function arrayObjectSort(b,a){return function(d,c){var g=d[b],e=c[b];return g<e?a=="desc"?1:-1:g>e?a=="desc"?-1:1:0}}function timedChunk(b,a,d,c,g){var e=b.concat();if(c==undefined)c=25;setTimeout(function(){var f=+new Date;do a.call(d,e.shift());while(e.length>0&&+new Date-f<100);if(e.length>0)setTimeout(arguments.callee,c);else g&&g(b)},c)}
(function(b){b.fn.fadeInAndOut=function(a,d,c){a={speed:a,easing:d,fn:c};b.extend(a,b.fn.fadeInAndOut.defaults);this.fadeIn(a.speed).delay(a.speed).fadeOut(a.speed,a.easing,a.fn)};b.fn.fadeInAndOut.defaults={speed:1E3,easing:"swing",fn:null}})(jQuery);

View File

@ -1,89 +0,0 @@
var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20170317",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5E3,pageSize:30,defaultSelectNode:null,autoExpandAttribute:false,defaultLang:""},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://transmission-control.googlecode.com/svn/resouces/checkupdate.js",contextMenus:{},panel:null,lang:null,reloading:false,autoReloadTimer:null,downloadDir:"",islocal:false,
B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},setlang:function(a,b){a||(a=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage);a||(a="zh-CN");if(a.indexOf("-")!=-1)a=a.split("-")[0].toLocaleLowerCase()+"-"+a.split("-")[1].toLocaleUpperCase();this.languages[a]||(a="en");$.getScript(system.rootPath+"lang/"+a+".js",
function(){system.lang=$.extend(true,system.defaultLang,system.lang);system.resetLangText();$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+a.replace("-","_")+".js").done(function(){b&&b()}).fail(function(){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){b&&b()})})})},init:function(a,b){this.readConfig();this.islocal=b==1?true:false;this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),
body:$("#m_body"),layout_body:$("#layout_body"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")};this.lang==null?this.setlang(a,function(){system.initdata()}):this.initdata()},resetLangText:function(a){a||(a=$);var b=a.find("*[system-lang]");$.each(b,function(c,d){var e=$(d).attr("system-lang");e.substr(0,1)=="["?$(d).html(eval("system.lang"+e)):$(d).html(eval("system.lang."+
e))});b=a.find("*[system-tip-lang]");$.each(b,function(c,d){var e=$(d).attr("system-tip-lang");e.substr(0,1)=="["?$(d).attr("title",eval("system.lang"+e)):$(d).attr("title",eval("system.lang."+e))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);var a=[],b="<span>"+this.lang.title.left+"</span>";a.push("<span class='tree-title-toolbar'>");for(var c in this.lang.tree.toolbar.nav){var d=this.lang.tree.toolbar.nav[c];a.push('<a href="javascript:void(0);" id="tree-toolbar-nav-'+
c+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+d+"</a>")}a.push("</span>");if(a.length>1){b+=a.join("");this.panel.left_layout.panel("setTitle",b);for(c in this.lang.tree.toolbar.nav)$("#tree-toolbar-nav-"+c).linkbutton()}else this.panel.left_layout.panel("setTitle",b);b="<span>"+this.lang.title.list+"</span>";a.length=0;a.push("<span class='tree-title-toolbar'>");for(c in this.lang["torrent-head"].buttons){d=
this.lang["torrent-head"].buttons[c];a.push('<a href="javascript:void(0);" id="torrent-head-buttons-'+c+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+d+"</a>")}a.push("</span>");if(a.length>1){b+=a.join("");this.panel.body.panel("setTitle",b);for(c in this.lang["torrent-head"].buttons){$("#torrent-head-buttons-"+c).linkbutton();switch(c){case "autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+
c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}}else this.panel.body.panel("setTitle",b);this.panel.status.panel("setTitle",this.lang.title.status);this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){system.currentTorrentId!=0&&$(this).data("isload")?system.getTorrentInfos(system.currentTorrentId):system.clearTorrentAttribute()},onLoad:function(){if(!$(this).data("isload")){$(this).data("isload",
true);system.currentTorrentId!=0&&setTimeout(function(){system.getTorrentInfos(system.currentTorrentId)},500)}}});$.each(this.languages,function(e,f){$("<option/>").text(f).val(e).attr("selected",e==system.lang.name?true:false).appendTo(system.panel.top.find("#lang"))});this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value});this.panel.toolbar.attr("class","panel-header");this.initTree();this.initToolbar();this.initStatusBar();this.initTorrentTable();this.connect();this.initEvent();
this.checkUpdate()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")});this.panel.droparea[0].addEventListener("dragover",function(a){a.stopPropagation();a.preventDefault();system.debug("#dropArea.dragover")},false);this.panel.list[0].addEventListener("dragover",function(a){a.stopPropagation();a.preventDefault();system.panel.droparea.show();system.debug("dragover")},false);this.panel.droparea[0].addEventListener("drop",function(a){a.stopPropagation();a.preventDefault();
system.panel.droparea.hide();system.debug("drop.e.dataTransfer:",a.dataTransfer);system.checkDropFiles(a.dataTransfer.files)},false);this.panel.droparea[0].addEventListener("dragleave",function(a){a.stopPropagation();a.preventDefault();system.panel.droparea.hide();system.debug("dragleave")},false);$("#text-drop-title").html(this.lang["public"]["text-drop-title"])},navToolbarClick:function(a){var b=a.id,c=$(a).data("status"),d=null;switch(b){case "tree-toolbar-nav-folders":d=this.panel.left.tree("find",
"folders");break;case "tree-toolbar-nav-statistics":d=this.panel.left.tree("find","statistics");break;case "torrent-head-buttons-autoExpandAttribute":d={};d.target=null;this.config.autoExpandAttribute=c==1?false:true}if(d){if(c==1){$(a).linkbutton({iconCls:"icon-disabled"});$(d.target).parent().hide();c=0}else{$(a).linkbutton({iconCls:"icon-enabled"});$(d.target).parent().show();c=1}$(a).data("status",c);this.saveConfig()}},checkDropFiles:function(a){if(a&&a.length){for(var b=[],c=0;c<a.length;c++){var d=
a[c];d.name.split(".").pop().toLowerCase()=="torrent"&&b.push(d)}b.length>0&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:300,resizable:true},datas:{files:b}})}},initTree:function(){this.panel.left.tree({data:[{id:"torrent-all",iconCls:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,
iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",
text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",
text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",
text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(c){system.loadTorrentToList({node:c})},lines:true});for(var a in this.lang.tree.toolbar.nav){var b=this.panel.left.tree("find",a);$(b.target).parent().hide()}if(this.config.defaultSelectNode)(a=this.panel.left.tree("find",this.config.defaultSelectNode))&&this.panel.left.tree("select",a.target)},initTorrentTable:function(){function a(){b&&$(b).remove();b=$("<div/>").appendTo("body");b.menu({onClick:function(h){if(h.iconCls=="icon-ok"){system.control.torrentlist.datagrid("hideColumn",
h.name);b.menu("setIcon",{target:h.target,iconCls:"icon-empty"})}else{system.control.torrentlist.datagrid("showColumn",h.name);b.menu("setIcon",{target:h.target,iconCls:"icon-ok"})}system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig()}});for(var d=system.control.torrentlist.datagrid("getColumnFields"),e=0;e<d.length;e++){var f=d[e],g=system.control.torrentlist.datagrid("getColumnOption",f);if(g.allowCustom!=false&&g.allowCustom!=
"false")b.menu("appendItem",{text:g.title,name:f,iconCls:g.hidden?"icon-empty":"icon-ok"})}}this.control.torrentlist=$("<table/>").attr("class","torrent-list").appendTo(this.panel.list);var b=null,c=-1;$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(d){d=d.fields;if(system.userConfig.torrentList.fields.length!=0)d=system.userConfig.torrentList.fields;var e=JSON.stringify(d);system.userConfig.torrentList.fields=JSON.parse(e);for(var f in d){d[f].title=system.lang.torrent.fields[d[f].field]||
d[f].field;system.setFieldFormat(d[f])}system.control.torrentlist.datagrid({autoRowHeight:false,pagination:true,rownumbers:true,remoteSort:false,checkOnSelect:false,pageSize:system.config.pageSize,idField:"id",fit:true,striped:true,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:true,columns:[d],onCheck:function(g,h){system.checkTorrentRow(g,h)},onUncheck:function(g,h){system.checkTorrentRow(g,h)},onCheckAll:function(){system.checkTorrentRow("all",
false)},onUncheckAll:function(){system.checkTorrentRow("all",true)},onSelect:function(g,h){c!=-1&&system.control.torrentlist.datagrid("unselectRow",c);system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south");system.getTorrentInfos(h.id);c=g},onUnselect:function(){if(system.config.autoExpandAttribute)system.panel.attribute.panel("options").collapsed||system.panel.layout_body.layout("collapse","south");system.currentTorrentId=
0;c=-1},onBeforeLoad:function(){system.currentTorrentId=0},onSortColumn:function(g,h){var i=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(g,h));system.control.torrentlist.datagrid("loadData",i);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=g;system.userConfig.torrentList.sortOrder=h;system.saveUserConfig()},onRowContextMenu:function(g,h){system.control.torrentlist.datagrid("checkRow",
h);g.preventDefault();system.showContextMenu("torrent-list",g)},onHeadDrop:function(){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig()},onResizeColumn:function(){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig()},onHeaderContextMenu:function(g){g.preventDefault();b||a();b.menu("show",{left:g.pageX,top:g.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(a){var b=
{};$.each(this.userConfig.torrentList.fields,function(c,d){b[d.field]=d});this.userConfig.torrentList.fields=[];$.each(a,function(c,d){var e=$.extend({},b[d.field]);e.width=d.width;e.hidden=d.hidden;system.userConfig.torrentList.fields.push(e)})},showContextMenu:function(a,b){var c=this.contextMenus[a];if(c)c.empty();else{c=$("<div/>").attr("class","easyui-menu").css({width:"180px"}).appendTo(this.panel.main);this.contextMenus[a]=c;c.menu()}var d=null;switch(a){case "torrent-list":d=["start","pause",
"-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom"];var e=this.panel.toolbar,f;for(f in d){var g=d[f];if(g=="-")$("<div class='menu-sep'></div>").appendTo(c);else{var h=e.find("#toolbar_"+g);if(h.length>0)c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.linkbutton("options").iconCls,disabled:h.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+
$(this).attr("id")).click()}});else{h=$("#"+g);h.length>0&&c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.attr("id").replace("menu","icon"),disabled:e.find("#toolbar_changeDownloadDir").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})}h=null}}}c.menu("show",{left:b.pageX,top:b.pageY});d=c=null},checkTorrentRow:function(a,b){if(a=="all"){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:b});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:b});
this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:b});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:b});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:b});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:b});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:b})}else if(this.control.torrentlist.datagrid("getChecked").length==0){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true});
this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}else{this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:false});
this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_queue").menubutton("enable");switch(transmission.torrents.all[b.id].status){case transmission._status.stopped:this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:false});
this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true});break;default:this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true});
this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:false})}}},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]);this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]);this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/
1E3,min:3,disabled:!this.config.autoReload,onChange:function(){var a=this.value;if($.isNumeric(a)){system.config.reloadStep=a*1E3;system.saveConfig()}}});this.panel.toolbar.find("#toolbar_autoreload").linkbutton({text:this.config.autoReload?this.lang.toolbar["autoreload-enabled"]:this.lang.toolbar["autoreload-disabled"],iconCls:this.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",this.config.autoReload?this.lang.toolbar.tip["autoreload-disabled"]:this.lang.toolbar.tip["autoreload-enabled"]).click(function(){if(system.config.autoReload){system.config.autoReload=
false;clearTimeout(system.autoReloadTimer);system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")}else{system.config.autoReload=true;system.reloadData();system.panel.toolbar.find("#toolbar_reload_time").numberspinner("enable")}system.saveConfig();$(this).linkbutton({text:system.config.autoReload?system.lang.toolbar["autoreload-enabled"]:system.lang.toolbar["autoreload-disabled"],iconCls:system.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",system.config.autoReload?
system.lang.toolbar.tip["autoreload-disabled"]:system.lang.toolbar.tip["autoreload-enabled"])});this.panel.toolbar.find("#toolbar_add_torrents").linkbutton({text:this.lang.toolbar["add-torrent"],disabled:false}).attr("title",this.lang.toolbar.tip["add-torrent"]).click(function(){system.openDialogFromTemplate({id:"dialog-torrent-add",options:{title:system.lang.toolbar["add-torrent"],width:620,height:400,resizable:true}})});this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:false}).attr("title",
this.lang.toolbar.tip["start-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-start"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});
transmission.exec({method:"torrent-stop"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true}).attr("title",
this.lang.toolbar.tip.recheck).click(function(){var a=system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(a.length==1)if(transmission.torrents.all[a[0].id].percentDone>0)confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this));else system.changeSelectedTorrentStatus("verify",$(this));else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true}).click(function(){system.changeSelectedTorrentStatus("reannounce",
$(this))});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.remove).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:b}})});this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:true}).click(function(){var a=
system.control.torrentlist.datagrid("getChecked");a.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:true},datas:{id:a[0].id}})});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",
options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:b}})});this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var a=$(this),b=false;if(a.linkbutton("options").iconCls=="icon-alt-speed-false")b=true;transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":b}},function(c){if(c.result=="success"){system.serverConfig["alt-speed-enabled"]=b;a.linkbutton({iconCls:"icon-alt-speed-"+
b.toString()});b?$("#status_alt_speed").show():$("#status_alt_speed").hide()}});a.linkbutton({iconCls:"icon-loading"})});this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:true}})});this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()});
this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(a){system.searchTorrents(a)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed);this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0);transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()};
transmission.on.postError=function(){};transmission.init({islocal:true},function(){system.reloadSession(true);system.getServerStatus()})},reloadSession:function(a){transmission.getSession(function(b){system.serverConfig=b;$("#status_version").html("Transmission "+system.lang.statusbar.version+b.version+", RPC: "+b["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")");if(b["alt-speed-enabled"]==true){system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-true"});
$("#status_alt_speed").show()}else{system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-false"});$("#status_alt_speed").hide()}system.downloadDir=b["download-dir"];parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(c){system.serverConfig["download-dir-free-space"]=c.arguments["size-bytes"];system.showFreeSpace(c.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]);a&&system.showStatus(system.lang.system.status.connected)})},
showFreeSpace:function(a){a=a;a=a==-1?system.lang["public"]["text-unknown"]:formatSize(a);$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+a)},reloadTorrentBaseInfos:function(a,b){if(!this.reloading){clearTimeout(this.autoReloadTimer);this.reloading=true;var c={trackers:transmission.trackers,folders:transmission.torrents.folders};transmission.torrents.getallids(function(d){var e=[],f;for(f in d)e.push(d[f].id);d=transmission.torrents.getErrorIds(e,true);
d.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(c)},d):system.resetTorrentInfos(c)},a,b)}},resetTorrentInfos:function(a){var b=this.currentTorrentId,c=this.panel.left.tree("find","servers");if(c)this.removeTreeNode("servers-loading");else{this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,iconCls:"icon-servers"}]);c=this.panel.left.tree("find","servers")}for(var d in transmission.trackers){var e=transmission.trackers[d],f=system.panel.left.tree("find",
e.nodeid),g=e.name+this.showNodeMoreInfos(e.count,e.size);f?system.updateTreeNodeText(e.nodeid,g,e.connected?"icon-server":"icon-server-error"):system.appendTreeNode(c,[{id:e.nodeid,text:g,iconCls:e.connected?"icon-server":"icon-server-error"}]);a.trackers[e.nodeid]=null}for(d in a.trackers)(e=a.trackers[d])&&system.removeTreeNode(e.nodeid);transmission.torrents.status[transmission._status.stopped]?system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length)):
system.updateTreeNodeText("paused",system.lang.tree.paused);transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending);if(transmission.torrents.status[transmission._status.seedwait]){f=system.panel.left.tree("find","sending");c=system.panel.left.tree("getChildren",f.target);g=system.lang.tree.wait+
this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);c.length>0?system.updateTreeNodeText(c[0].id,g):system.appendTreeNode(f,[{id:"seedwait",text:g,iconCls:"icon-wait"}])}else system.removeTreeNode("seedwait");transmission.torrents.status[transmission._status.check]?system.updateTreeNodeText("check",system.lang.tree.check+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.check].length)):system.updateTreeNodeText("check",system.lang.tree.check);
if(transmission.torrents.status[transmission._status.checkwait]){f=system.panel.left.tree("find","check");c=system.panel.left.tree("getChildren",f.target);g=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);c.length>0?system.updateTreeNodeText(c[0].id,g):system.appendTreeNode(f,[{id:"checkwait",text:g,iconCls:"icon-wait"}])}else system.removeTreeNode("checkwait");transmission.torrents.status[transmission._status.download]?system.updateTreeNodeText("downloading",
system.lang.tree.downloading+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.download].length)):system.updateTreeNodeText("downloading",system.lang.tree.downloading);if(transmission.torrents.status[transmission._status.downloadwait]){f=system.panel.left.tree("find","downloading");c=system.panel.left.tree("getChildren",f.target);g=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);c.length>0?system.updateTreeNodeText(c[0].id,
g):system.appendTreeNode(f,[{id:"downloadwait",text:g,iconCls:"icon-wait"}])}else system.removeTreeNode("downloadwait");system.updateTreeNodeText("actively",system.lang.tree.actively+this.showNodeMoreInfos(transmission.torrents.actively.length));system.updateTreeNodeText("error",system.lang.tree.error+this.showNodeMoreInfos(transmission.torrents.error.length));system.updateTreeNodeText("warning",system.lang.tree.warning+this.showNodeMoreInfos(transmission.torrents.warning.length));f=system.panel.left.tree("getSelected");
if(f!=null){g=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:f,page:g})}b!=0&&system.control.torrentlist.datagrid("selectRecord",b);system.reloading=false;if(system.config.autoReload)system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep);system.updateTreeNodeText("torrent-all",system.lang.tree.all+this.showNodeMoreInfos(transmission.torrents.count,transmission.torrents.totalSize));b="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",");
$.each(b,function(h,i){switch(i){case "uploadedBytes":case "downloadedBytes":system.updateTreeNodeText(i,system.lang.tree.statistics[i]+formatSize(system.serverSessionStats["cumulative-stats"][i]));system.updateTreeNodeText("current-"+i,system.lang.tree.statistics[i]+formatSize(system.serverSessionStats["current-stats"][i]));break;case "secondsActive":system.updateTreeNodeText(i,system.lang.tree.statistics[i]+getTotalTime(system.serverSessionStats["cumulative-stats"][i]*1E3));system.updateTreeNodeText("current-"+
i,system.lang.tree.statistics[i]+getTotalTime(system.serverSessionStats["current-stats"][i]*1E3));break;default:system.updateTreeNodeText(i,system.lang.tree.statistics[i]+system.serverSessionStats["cumulative-stats"][i]);system.updateTreeNodeText("current-"+i,system.lang.tree.statistics[i]+system.serverSessionStats["current-stats"][i])}});for(d in transmission.torrents.folders)a.folders[transmission.torrents.folders[d].nodeid]=null;this.loadFolderList(a.folders);navigator.userAgent.indexOf("Firefox")>
0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(a,b){var c="";if(a>0)c=" <span class='nav-torrents-number'>("+a+")</span>";if(b>0)c+="<span class='nav-total-size'>["+formatSize(b)+"]</span>";return c},getServerStatus:function(){if(!this.reloading){clearTimeout(this.autoReloadTimer);this.reloading=true;transmission.getStatus(function(a){system.reloading=false;$("#status_downloadspeed").html(formatSize(a.downloadSpeed,false,"speed"));$("#status_uploadspeed").html(formatSize(a.uploadSpeed,
false,"speed"));system.serverSessionStats=a;if(a.torrentCount==0){(a=system.panel.left.tree("find","servers"))&&system.panel.left.tree("remove",a.target);system.updateTreeNodeText("torrent-all",system.lang.tree.all)}})}},showStatus:function(a,b){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south");this.panel.status_text.show();this.panel.status_text.html(a);if(b!=0){if(b==undefined)b=3E3;this.panel.status_text.fadeOut(b,function(){$("#layout_left").layout("collapse",
"south")})}},updateTreeNodeText:function(a,b,c){if(a=this.panel.left.tree("find",a)){b={target:a.target,text:b};if(c!=undefined)b.iconCls=c;this.panel.left.tree("update",b)}},appendTreeNode:function(a,b){var c=null;(c=typeof a=="string"?this.panel.left.tree("find",a):a)?this.panel.left.tree("append",{parent:c.target,data:b}):this.panel.left.tree("append",{data:b})},removeTreeNode:function(a){(a=this.panel.left.tree("find",a))&&this.panel.left.tree("remove",a.target)},loadTorrentToList:function(a){if(transmission.torrents.all){jQuery.extend({node:null,
page:1},a);if(a.node){var b=null,c=this.panel.left.tree("getParent",a.node.target)||{id:""},d=this.panel.left.data("currentNodeId");if(d!=a.node.id){this.control.torrentlist.datagrid({pageNumber:1});d=a.node.id}this.panel.left.data("currentNodeId",d);switch(c.id){case "servers":b=transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case "torrent-all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;
case "sending":b=transmission.torrents.status[transmission._status.seed];break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];break;case "check":b=transmission.torrents.status[transmission._status.check];break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;
case "actively":b=transmission.torrents.actively;break;case "error":b=transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;case "search-result":b=transmission.torrents.searchResult;break;default:if(a.node.id.indexOf("folders-")!=-1)if(c=transmission.torrents.folders[a.node.id])b=c.torrents}}if(this.config.defaultSelectNode!=a.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=a.node.id;this.saveConfig()}a=[];for(var e in b){if(!b[e])return;
c=this.lang.torrent["status-text"][b[e].status];parseFloat(b[e].percentDone*100).toFixed(2);c==transmission._status.check&&parseFloat(b[e].recheckProgress*100).toFixed(2);if(b[e].error!=0)c="<span class='text-status-error'>"+c+"</span>";else if(b[e].warning)c="<span class='text-status-warning' title='"+b[e].warning+"'>"+c+"</span>";d={};d=$.extend(d,b[e]);d.status=c;d.statusCode=b[e].status;d.completeSize=b[e].totalSize-b[e].leftUntilDone;d.leecherCount=b[e].leecher;d.seederCount=b[e].seeder;a.push(d)}this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true});
this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable");this.updateTorrentCurrentPageDatas(a)}}},updateTorrentCurrentPageDatas:function(a){var b=
this.control.torrentlist.datagrid("getRows");if(a.length==0&&b.length>0)this.control.torrentlist.datagrid("loadData",[]);else{var c=this.control.torrentlist.datagrid("options"),d=null;if(c.sortName){d=c.sortName;a=a.sort(arrayObjectSort(d,c.sortOrder))}if(b.length==0||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a);else{this.control.torrentlist.datagrid("getData").originalRows=
a;d=(c.pageNumber-1)*parseInt(c.pageSize);c=d+parseInt(c.pageSize);a=a.slice(d,c);c={};d={};for(var e in transmission.torrents.recently){var f=transmission.torrents.recently[e];c[f.id]=true}for(e in a){f=a[e];d[f.id]=f}var g={};for(e=b.length-1;e>=0;e--){f=b[e];var h=d[f.id];if(h)if(c[f.id]){this.control.torrentlist.datagrid("updateRow",{index:e,row:h});g[f.id]=f}else if(transmission.torrents.removed)if(transmission.torrents.removed.length>0&&$.inArray(f.id,transmission.torrents.removed)!=-1)this.control.torrentlist.datagrid("deleteRow",
e);else g[f.id]=f;else g[f.id]=f;else this.control.torrentlist.datagrid("deleteRow",e)}for(e in a){f=a[e];g[f.id]||this.control.torrentlist.datagrid("appendRow",f)}}}},getTorrentNameBar:function(a){var b="",c=a.name;switch(a.status){case transmission._status.stopped:b="iconlabel icon-pause-small";break;case transmission._status.check:b="iconlabel icon-checking";break;case transmission._status.download:b="iconlabel icon-down";break;case transmission._status.seed:b="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:b=
"iconlabel icon-wait"}c+="\n"+a.downloadDir;if(a.warning){b="iconlabel icon-warning-type1";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.warning}if(a.error!=0){b="iconlabel icon-exclamation";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.errorString}return'<span class="'+b+'" title="'+c+'">'+a.name+"</span>"},getTorrentProgressBar:function(a,b){a+="%";var c="",d=0;d=typeof b=="object"?b.status:b;switch(d){case transmission._status.stopped:c="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:c=
"torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:c="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:c="torrent-progress-seed"}if(typeof b=="object"){if(b.warning)c="torrent-progress-warning";if(b.error!=0)c="torrent-progress-error"}return'<div class="torrent-progress" title="'+a+'"><div class="torrent-progress-text">'+a+'</div><div class="torrent-progress-bar '+c+'" style="width:'+a+';"></div></div>'},
addTorrentsToServer:function(a,b,c,d){var e=b-a.length,f=a.shift();if(f){this.showStatus(this.lang.system.status.queue+(e+1)+"/"+b+"<br/>"+f,0);transmission.addTorrentFromUrl(f,d,c,function(){system.addTorrentsToServer(a,b,c,d)})}else{this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus()}},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),e=[];a||(a="start");for(var f in d)e.push(d[f].id);c||(c="torrent-"+a);if(e.length>0){if(b){var g=
b.linkbutton("options").iconCls;b.linkbutton({disabled:true,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:e}},function(){b&&b.linkbutton({iconCls:g});system.control.torrentlist.datagrid("uncheckAll");system.reloadTorrentBaseInfos()})}},searchTorrents:function(a){if(a!=""){var b=transmission.torrents.search(a);if(b==null||b.length==0)this.removeTreeNode("search-result");else{var c=this.panel.left.tree("find","search-result");a=this.lang.tree["search-result"]+" : "+a+" ("+b.length+
")";if(c==null){this.appendTreeNode("torrent-all",[{id:"search-result",text:a,iconCls:"icon-search"}]);c=this.panel.left.tree("find","search-result")}else this.panel.left.tree("update",{target:c.target,text:a});this.panel.left.tree("select",c.target)}}},getTorrentInfos:function(a){if(transmission.torrents.all[a])if(!transmission.torrents.all[a].infoIsLoading){if(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId])if(transmission.torrents.all[this.currentTorrentId].infoIsLoading)return;
this.currentTorrentId=a;if(!this.panel.attribute.panel("options").collapsed){var b=transmission.torrents.all[a];b.infoIsLoading=true;var c="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString";b.moreInfosTag||(c+=",files,trackers,comment,dateCreated,creator,downloadDir");transmission.torrents.getMoreInfos(c,a,function(d){b.infoIsLoading=false;if(d!=null){jQuery.extend(b,d[0]);if(system.currentTorrentId==0||system.currentTorrentId!=a)system.clearTorrentAttribute();
else{b.completeSize=b.totalSize-b.leftUntilDone;b.moreInfosTag=true;system.fillTorrentBaseInfos(b);system.fillTorrentFileList(b);system.fillTorrentServerList(b);system.fillTorrentPeersList(b);system.fillTorrentConfig(b);transmission.torrents.all[a]=b;transmission.torrents.datas[a]=b}}})}}},clearTorrentAttribute:function(){system.panel.attribute.find("#torrent-files-table").datagrid("loadData",[]);system.panel.attribute.find("#torrent-servers-table").datagrid("loadData",[]);system.panel.attribute.find("#torrent-peers-table").datagrid("loadData",
[]);system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(a,b,c){var d=c.datagrid("getRows"),e=c.datagrid("options"),f=null;if(e.sortName){f=e.sortName;b=b.sort(arrayObjectSort(f,e.sortOrder))}if(d.length==0||b.length!=c.datagrid("getData").total&&b.length>e.pageSize)c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:f,sortOrder:e.sortOrder}).datagrid("loadData",b);else{c.datagrid("getData").originalRows=b;f=(e.pageNumber-1)*parseInt(e.pageSize);
e=f+parseInt(e.pageSize);b=b.slice(f,e);e={};for(var g in b){f=b[g];e[f[a]]=f}for(g=d.length-1;g>=0;g--){f=d[g];(b=e[f[a]])?c.datagrid("updateRow",{index:g,row:b}):c.datagrid("deleteRow",g)}}},fillTorrentBaseInfos:function(a){$.each(a,function(b,c){switch(b){case "rateDownload":case "rateUpload":c=formatSize(c,true,"speed");break;case "totalSize":case "uploadedEver":case "leftUntilDone":case "completeSize":c=formatSize(c);break;case "addedDate":case "dateCreated":case "doneDate":c=formatLongTime(c);
break;case "status":c=system.lang.torrent["status-text"][c];break;case "error":c==0?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case "comment":c=system.replaceURI(c)}system.panel.attribute.find("#torrent-attribute-value-"+b).html(c)})},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=[],e=a.name.length+1,f;for(f in b){var g=b[f],h=c[f],i=parseFloat(h.bytesCompleted/g.length*100).toFixed(2);d.push({name:g.name==
a.name?g.name:g.name.substr(e),index:f,bytesCompleted:h.bytesCompleted,percentDone:system.getTorrentProgressBar(i,transmission._status.download),length:g.length,wanted:system.lang.torrent.attribute.status[h.wanted],priority:'<span class="iconlabel icon-flag-'+h.priority+'">'+system.lang.torrent.attribute.priority[h.priority]+"</span>"})}this.updateCurrentPageDatas("index",d,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(a){var b=a.trackers,c=a.trackerStats,d=
[],e;for(e in b){var f=c[e],g={},h;for(h in f)switch(h){case "lastAnnounceTime":case "nextAnnounceTime":g[h]=formatLongTime(f[h]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":g[h]=system.lang.torrent.attribute.status[f[h]];break;default:g[h]=f[h]}d.push(g)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",d,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){a=a.peers;var b=[],c;for(c in a){var d=a[c],e={},f;for(f in d)e[f]=
d[f];d=parseFloat(d.progress*100).toFixed(2);e.progress=system.getTorrentProgressBar(d,transmission._status.download);b.push(e)}this.updateCurrentPageDatas("address",b,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(a){system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")==4&&transmission.torrents.getConfig(a.id,function(b){if(b!=null){jQuery.extend(transmission.torrents.all[system.currentTorrentId],b[0]);system.currentTorrentId!=0&&$.each(b[0],
function(c,d){var e=false,f=false,g=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(d==0){f=false;e=true}g=true;case "downloadLimited":case "uploadLimited":if(d==true||d==1)f=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!f);g&&system.panel.attribute.find("#"+c).prop("indeterminate",e).data("_tag",d);system.panel.attribute.find("#"+c).prop("checked",f);break;default:system.panel.attribute.find("#"+c).val(d);system.panel.attribute.find("#"+c).numberspinner("setValue",
d)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case "size":a.formatter=function(b){return formatSize(b)};break;case "speed":a.formatter=function(b){return formatSize(b,true,"speed")};break;case "longtime":a.formatter=function(b){return formatLongTime(b)};break;case "progress":a.formatter=function(b,c){var d=parseFloat(b*100).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[c.id])};break;case "_usename_":switch(a.field){case "name":a.formatter=function(b,
c){return system.getTorrentNameBar(transmission.torrents.all[c.id])}}}},reloadData:function(){this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos()},loadFolderList:function(a){this.removeTreeNode("folders-loading");for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}transmission.downloadDirs.length!=0&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})})},
appendFolder:function(a){if(a){var b="folders";a=a.split("/");var c="folders-",d;for(d in a){var e=a[d];if(e!=""){c+=this.B64.encode(e);var f=this.panel.left.tree("find",c),g=transmission.torrents.folders[c];e=e+this.showNodeMoreInfos(g.count,g.size);if(f)this.updateTreeNodeText(c,e);else{this.appendTreeNode(b,[{id:c,text:e}]);if(b!="folders"){f=this.panel.left.tree("find",b);this.panel.left.tree("collapse",f.target)}}b=c}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,
function(b){return'<a href="'+b+'" target="_blank">'+b+"</a>"})},readConfig:function(){this.readUserConfig();var a=cookies.get(this.configHead);if($.isPlainObject(a))this.config=$.extend(this.config,a);for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){cookies.set(this.configHead,this.config,100);for(var a in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[a],this.dictionary[a]);this.saveUserConfig()},
readUserConfig:function(){var a=window.localStorage[this.configHead];if(a){a=JSON.parse(a);this.userConfig=$.extend(true,this.userConfig,a)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(a,b,c,d){if(window.FileReader){var e=$("input[id='"+a+"']")[0].files;$.each(e,function(f,g){transmission.addTorrentFromFile(g,b,c,d,e.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.getScript(this.checkUpdateScript,
function(){if(system.codeupdate<system.lastUpdateInfos.update){$("#area-update-infos").show();$("#msg-updateInfos").html(system.lastUpdateInfos.update+" -> "+system.lastUpdateInfos.infos)}else $("#area-update-infos").hide()})},changeLanguages:function(a){if(!(a==this.lang.name||!a)){this.config.defaultLang=a;this.saveConfig();location.href="?lang="+a}},getStorageData:function(a,b){return window.localStorage[a]==null?b:window.localStorage[a]},setStorageData:function(a,b){window.localStorage[a]=b},
openDialogFromTemplate:function(a){a=$.extend(true,{id:null,options:null,datas:null},a);if(a.id!=null){var b=a.id,c=a.options,d=a.datas,e=$("#"+b);if(e.length){e.dialog("open");d&&$.each(d,function(f,g){e.data(f,g)});e.dialog({content:system.templates[b]})}else{c=$.extend(true,{title:"",width:100,height:100,resizable:false,cache:true,content:"loading...",modal:true},c);$("<div/>").attr("id",b).appendTo(document.body).dialog(c);$.get(system.rootPath+"template/"+b+".html?time="+new Date,function(f){system.templates[b]=
f;d&&$.each(d,function(g,h){$("#"+b).data(g,h)});$("#"+b).dialog({content:f})})}}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)}};$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js");$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})});
function pagerFilter(a){if(typeof a.length=="number"&&typeof a.splice=="function")a={total:a.length,rows:a};var b=$(this),c=b.datagrid("options"),d=b.datagrid("getPager"),e=b.data("buttons");d.pagination({onSelectPage:function(g,h){c.pageNumber=g;c.pageSize=h;d.pagination("refresh",{pageNumber:g,pageSize:h});b.datagrid("loadData",a)},buttons:e});if(!a.originalRows)a.originalRows=a.rows;e=(c.pageNumber-1)*parseInt(c.pageSize);var f=e+parseInt(c.pageSize);a.rows=a.originalRows.slice(e,f);return a};

File diff suppressed because one or more lines are too long

View File

@ -1,27 +0,0 @@
var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20160823",config:{autoReload:true,reloadStep:5E3,pageSize:30,defaultSelectNode:null},lang:null,reloading:false,autoReloadTimer:null,downloadDir:"",islocal:false,B64:new Base64,currentTorrentId:0,currentContentPage:"home",currentContentConfig:null,control:{tree:null,torrentlist:null},serverConfig:null,serverSessionStats:null,torrentListChecked:false,debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)},
setlang:function(a,b){a||(a=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage);a||(a="zh-CN");if(a.indexOf("-")!=-1)a=a.split("-")[0].toLocaleLowerCase()+"-"+a.split("-")[1].toLocaleUpperCase();this.languages[a]||(a="en");$.getScript(system.rootPath+"lang/"+a+".js",function(){system.lang=$.extend(true,system.defaultLang,system.lang);system.resetLangText();b&&b()})},resetLangText:function(){var a=$("*[system-lang]");$.each(a,function(b,c){var d=$(c).attr("system-lang");
$(c).html(eval("system.lang."+d))})},init:function(a){this.readConfig();transmission.options.getFolders=false;this.lang==null?this.setlang(a,function(){system.initdata()}):this.initdata()},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);this.control.torrentlist=$("#torrent-list");this.connect()},readConfig:function(){var a=cookies.get("transmission-web-control");if($.isPlainObject(a))this.config=$.extend(this.config,a)},saveConfig:function(){cookies.set("transmission-web-control",
this.config,100)},connect:function(){transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()};transmission.on.postError=function(){};transmission.init({islocal:true},function(){system.reloadSession(true);system.getServerStatus()})},reloadSession:function(){transmission.getSession(function(a){system.serverConfig=a;a["alt-speed-enabled"]==true?$("#status_alt_speed").show():$("#status_alt_speed").hide();system.downloadDir=a["download-dir"];parseInt(system.serverConfig["rpc-version"])>=
15?transmission.getFreeSpace(system.downloadDir,function(b){system.serverConfig["download-dir-free-space"]=b.arguments["size-bytes"];system.showFreeSpace(b.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"])})},showFreeSpace:function(a){a=a;a=a==-1?system.lang["public"]["text-unknown"]:formatSize(a);$("#status_freespace").text(a)},getServerStatus:function(){if(!this.reloading){clearTimeout(this.autoReloadTimer);this.reloading=true;transmission.getStatus(function(a){system.reloading=
false;$("#status_downloadspeed").html(formatSize(a.downloadSpeed,false,"speed"));$("#status_uploadspeed").html(formatSize(a.uploadSpeed,false,"speed"));system.serverSessionStats=a})}},reloadTorrentBaseInfos:function(a){if(!this.reloading){clearTimeout(this.autoReloadTimer);this.reloading=true;var b={trackers:transmission.trackers,folders:transmission.torrents.folders};transmission.torrents.getallids(function(c){var d=[],e;for(e in c)d.push(c[e].id);c=transmission.torrents.getErrorIds(d,true);c.length>
0?transmission.torrents.getallids(function(){system.resetTorrentInfos(b)},c):system.resetTorrentInfos(b)},a)}},resetTorrentInfos:function(){transmission.torrents.status[transmission._status.stopped]?this.updateCount("paused",transmission.torrents.status[transmission._status.stopped].length):this.updateCount("paused",0);transmission.torrents.status[transmission._status.seed]?this.updateCount("sending",transmission.torrents.status[transmission._status.seed].length):this.updateCount("sending",0);transmission.torrents.status[transmission._status.check]?
this.updateCount("check",transmission.torrents.status[transmission._status.check].length):this.updateCount("check",0);transmission.torrents.status[transmission._status.download]?this.updateCount("downloading",transmission.torrents.status[transmission._status.download].length):this.updateCount("downloading",0);this.updateCount("actively",transmission.torrents.actively.length);this.updateCount("error",transmission.torrents.error.length);this.updateCount("warning",transmission.torrents.warning.length);
system.reloading=false;if(system.config.autoReload)system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep);this.updateCount("all",transmission.torrents.count);if(this.currentContentPage=="torrent-list"){var a=this.currentContentConfig;a.reload=true;this.showContent(a)}},updateCount:function(a,b){var c=$("#count-"+a);c.text(b);b==0?c.hide():c.show()},reloadData:function(){this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos()},
showContent:function(a){var b={page:"",type:"",data:"",title:this.lang.system.title,reload:false,callback:null},c=null;if(typeof a=="string"){b.page=a;c=b}else c=jQuery.extend(b,a);if(!(c.page==this.currentContentPage&&!c.reload)){$("#content-"+c.page).show();if(c.page!=this.currentContentPage){$("#content-"+this.currentContentPage).hide();this.control.torrentlist.find("input:checked").prop("checked",false).checkboxradio("refresh");this.torrentListChecked=false}$("#torrent-page-bar").hide();this.torrentListChecked||
$("#torrent-toolbar").hide();this.currentContentPage=c.page;switch(c.type){case "torrent-list":c.title=this.lang.tree[c.data];this.loadTorrentToList({target:c.data})}$("#page-title").text(c.title);c.reload=false;this.currentContentConfig=c;c.callback&&c.callback()}},getTorrentFromType:function(a){var b=null;switch(a){case "torrent-all":case "all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;case "sending":b=transmission.torrents.status[transmission._status.seed];
break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];break;case "check":b=transmission.torrents.status[transmission._status.check];break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":b=transmission.torrents.actively;break;case "error":b=
transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;case "search-result":b=transmission.torrents.searchResult}return b},loadTorrentToList:function(a){if(!this.torrentListChecked)if(transmission.torrents.all){jQuery.extend({node:null,page:1,target:"all"},a);if(a.target){var b=this.getTorrentFromType(a.target);this.config.defaultSelectNode=a.target;this.saveConfig();var c=[];this.control.torrentlist.empty();for(var d in b)if(b[d]){var e=parseFloat(b[d].percentDone*
100).toFixed(2),f=this.lang.torrent["status-text"][b[d].status];if(b[d].error!=0)f="<span class='text-status-error'>"+f+"</span>";else if(b[d].warning)f="<span class='text-status-warning' title='"+b[d].warning+"'>"+f+"</span>";var g={id:b[d].id,name:this.getTorrentNameBar(b[d]),totalSize:b[d].totalSize,percentDone:this.getTorrentProgressBar(e,b[d]),percentDoneNumber:e,status:f,addedDate:formatLongTime(b[d].addedDate),completeSize:b[d].totalSize-b[d].leftUntilDone,rateDownload:b[d].rateDownload,rateUpload:b[d].rateUpload,
leecherCount:b[d].leecher,seederCount:b[d].seeder,uploadRatio:b[d].uploadRatio,uploadedEver:b[d].uploadedEver};c.push(g)}if(c.length==0)setTimeout(function(){system.showContent("home")},100);else{if(this.torrentPager.onGotoPage==null)this.torrentPager.onGotoPage=function(h){system.control.torrentlist.empty();$("#torrent-toolbar").hide();for(var i in h)system.appendTorrentToList(h[i]);$(system.control.torrentlist).listview("refresh").find("input[type='checkbox']").click(function(){system.changeTorrentToolbar(this,
g);system.torrentListChecked?system.control.torrentlist.find("a[name='torrent']").css("marginLeft","0px"):system.control.torrentlist.find("a[name='torrent']").css("marginLeft","-35px")}).checkboxradio()};this.torrentPager.setDatas(c,a.target)}}}},appendTorrentToList:function(a){var b={id:a.id,name:a.name,rateDownload:formatSize(a.rateDownload,false,"speed"),rateUpload:formatSize(a.rateUpload,false,"speed"),completeSize:formatSize(a.completeSize),totalSize:formatSize(a.totalSize),percentDone:a.percentDone};
a="<li id='li-torrent-$id$' torrentid='$id$' style='padding:0px;'><a name='torrent' style='padding:0px;margin-left:-35px;'><label data-corners='false' style='margin:0px;border:0px;padding:0px;'><input type='checkbox' id='torrent-$id$'/><label for='torrent-$id$'><h3 style='margin:0px;'>$name$</h3><div style='padding:0px 10px 5px 0px;'>$percentDone$</div><p class='torrent-list-infos'>↓$rateDownload$ ↑$rateUpload$|$completeSize$/$totalSize$</p></label></label></a><a class='more'></a>";a=a.replace(/\$([^\$]*)\$/g,
function(c,d){return b[d]});a=$(a);a.on("swiperight",function(){system.control.torrentlist.find("a[name='torrent']").css("marginLeft","0px")});a.on("swipeleft",function(){system.control.torrentlist.find("a[name='torrent']").css("marginLeft","-35px")});a.appendTo(this.control.torrentlist)},getTorrentNameBar:function(a){var b="",c=a.name;switch(a.status){case transmission._status.stopped:b="iconlabel icon-pause-small";break;case transmission._status.check:b="iconlabel icon-checking";break;case transmission._status.download:b=
"iconlabel icon-down";break;case transmission._status.seed:b="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:b="iconlabel icon-wait"}if(a.warning){b="iconlabel icon-warning-type1";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.warning}if(a.error!=0){b="iconlabel icon-exclamation";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.errorString}return'<span class="'+b+'" title="'+c+'">'+a.name+"</span>"},getTorrentProgressBar:function(a,
b){a+="%";var c="";switch(b.status){case transmission._status.stopped:c="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:c="torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:c="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:c="torrent-progress-seed"}if(b.warning)c="torrent-progress-warning";if(b.error!=0)c="torrent-progress-error";return'<div class="torrent-progress" title="'+
a+'"><div class="torrent-progress-text">'+a+'</div><div class="torrent-progress-bar '+c+'" style="width:'+a+';"></div></div>'},changeTorrentToolbar:function(a,b){var c=this.control.torrentlist.find("input:checked");$("#torrent-checked-count").html(c.length);if(c.length>0){this.torrentListChecked=true;$("#torrent-toolbar").show()}else{this.torrentListChecked=false;$("#torrent-toolbar").hide()}if(b)this.currentTorrentId=b.id},torrentPager:{datas:null,pageSize:30,pageNumber:0,pageCount:0,count:0,onGotoPage:null,
currentDatas:null,pageBar:null,controls:{prev:null,next:null,number:null},head:"",init:function(a){this.pageBar=$("#torrent-page-bar");this.controls.next=this.pageBar.find("#page-next");this.controls.next.click(function(){system.torrentPager.gotoPage("next")});this.controls.prev=this.pageBar.find("#page-prev");this.controls.prev.click(function(){system.torrentPager.gotoPage("prev")});this.controls.number=this.pageBar.find("#page-number");a&&this.setDatas(a)},setDatas:function(a,b){this.datas||this.init();
this.datas=a;this.pageBar.show();this.count=this.datas.length;this.pageCount=parseInt(this.count/this.pageSize);this.count%this.pageSize>0&&this.pageCount++;this.pageCount==1&&this.pageBar.hide();this.head==b?this.gotoPage():this.gotoPage(1);this.head=b},gotoPage:function(a){if(typeof a=="number")this.pageNumber=a;else switch(a){case "next":this.pageNumber++;break;case "prev":this.pageNumber--}if(this.pageNumber>this.pageCount)this.pageNumber=this.pageCount;if(this.pageNumber<1)this.pageNumber=1;
a=(this.pageNumber-1)*parseInt(this.pageSize);var b=a+parseInt(this.pageSize);this.currentDatas=this.datas.slice(a,b);this.controls.number.text(this.pageNumber+"/"+this.pageCount);this.pageNumber>1?this.controls.prev.show():this.controls.prev.hide();this.pageNumber<this.pageCount?this.controls.next.show():this.controls.next.hide();this.onGotoPage&&this.onGotoPage(this.currentDatas)}},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.find("input:checked"),e=[];a||(a="start");
for(var f=0;f<d.length;f++)e.push(parseInt(d[f].id.replace("torrent-","")));if(e.length>0){arguments={ids:e};switch(a){case "remove":arguments["delete-local-data"]=c.removeData;break;case "verify":if(e.length==1){if(transmission.torrents.all[e[0]].percentDone>0)if(confirm(system.lang.toolbar.tip["recheck-confirm"])==false)return}else if(confirm(system.lang.toolbar.tip["recheck-confirm"])==false)return}b=$(b);b.attr("disabled",true);transmission.exec({method:"torrent-"+a,arguments:arguments},function(){b.attr("disabled",
false);system.reloadTorrentBaseInfos()});this.torrentListChecked=false}},addTorrentsToServer:function(a,b,c,d,e){var f=b-a.length,g=a.shift();if(g){this.showStatus(this.lang.system.status.queue,b-f+1);transmission.addTorrentFromUrl(g,d,c,function(){system.addTorrentsToServer(a,b,c,d,e)})}else{this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus();e&&e()}},showStatus:function(a,b){if(a){$("#status").show();$("#status-msg").html(a);$.isNumeric(b)?$("#status-count").html(b).show():
$("#status-count").hide()}else $("#status").hide()}};$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js");$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"))})});

View File

@ -1,8 +0,0 @@
var transmission={SessionId:"",isInitialized:false,host:"",port:"9091",path:"/transmission/rpc",rpcpath:"../rpc",fullpath:"",on:{torrentCountChange:null,postError:null},username:"",password:"",_status:{stopped:0,checkwait:1,check:2,downloadwait:3,download:4,seedwait:5,seed:6,actively:101},options:{getFolders:true,getTarckers:true},headers:{},trackers:{},islocal:false,downloadDirs:[],getSessionId:function(a,b){jQuery.ajax({type:"POST",url:this.fullpath,error:function(d){var c="";if(d.status===409&&
(c=d.getResponseHeader("X-Transmission-Session-Id"))){a.isInitialized=true;a.SessionId=c;a.headers["X-Transmission-Session-Id"]=c;b&&b()}},headers:this.headers})},init:function(a,b){jQuery.extend(this,a);if(this.username&&this.password)this.headers.Authorization="Basic "+(new Base64).encode(this.username+":"+this.password);this.fullpath=this.rpcpath;this.getSessionId(this,b)},exec:function(a,b,d){if(!this.isInitialized)return false;var c={method:"",arguments:{},tag:""};jQuery.extend(c,a);var e={type:"POST",
url:this.fullpath,dataType:"json",data:JSON.stringify(c),success:function(f){b&&b(f,d)},error:function(f){var g="";if(f.status===409&&(g=f.getResponseHeader("X-Transmission-Session-Id"))){transmission.SessionId=g;transmission.headers["X-Transmission-Session-Id"]=g;jQuery.ajax(e)}else transmission.on.postError&&transmission.on.postError(f)},headers:this.headers};jQuery.ajax(e)},getStatus:function(a){this.exec({method:"session-stats"},function(b){if(b.result=="success"){a&&a(b.arguments);if(transmission.torrents.count!=
b.arguments.torrentCount||transmission.torrents.activeTorrentCount!=b.arguments.activeTorrentCount||transmission.torrents.pausedTorrentCount!=b.arguments.pausedTorrentCount){transmission.torrents.count=b.arguments.torrentCount;transmission.torrents.activeTorrentCount=b.arguments.activeTorrentCount;transmission.torrents.pausedTorrentCount=b.arguments.pausedTorrentCount;transmission._onTorrentCountChange()}}})},getSession:function(a){this.exec({method:"session-get"},function(b){b.result=="success"&&
a&&a(b.arguments)})},addTorrentFromUrl:function(a,b,d,c){if(a.match(/^[0-9a-f]{40}$/i))a="magnet:?xt=urn:btih:"+a;a={method:"torrent-add",arguments:{filename:a,paused:!d}};if(b)a.arguments["download-dir"]=b;this.exec(a,function(e){switch(e.result){case "success":if(c)if(e.arguments["torrent-added"])c(e.arguments["torrent-added"]);else e.arguments["torrent-duplicate"]&&c({status:"duplicate",torrent:e.arguments["torrent-duplicate"]});break;default:c&&c(e.result)}})},addTorrentFromFile:function(a,b,
d,c,e){var f=new FileReader;f.onload=function(g){g=g.target.result;var h=g.indexOf("base64,");if(h!=-1){g=g.substring(h+7);transmission.exec({method:"torrent-add",arguments:{metainfo:g,"download-dir":b,paused:d}},function(i){switch(i.result){case "success":c&&c(i.arguments["torrent-added"],e);break;case "duplicate torrent":c&&c("duplicate")}})}};f.readAsDataURL(a)},_onTorrentCountChange:function(){this.torrents.loadSimpleInfo=false;this.on.torrentCountChange&&this.on.torrentCountChange()},removeTorrent:function(a,
b,d){this.exec({method:"torrent-remove",arguments:{ids:a,"delete-local-data":b}},function(c){d&&d(c.result)})},getFreeSpace:function(a,b){this.exec({method:"free-space",arguments:{path:a}},function(d){b&&b(d)})},updateBlocklist:function(a){this.exec({method:"blocklist-update"},function(b){a&&a(b.result)})},renameTorrent:function(a,b,d,c){var e=this.torrents.all[a];if(!e)return false;this.exec({method:"torrent-rename-path",arguments:{ids:[a],path:b||e.name,name:d}},function(f){c&&c(f)})},closeSession:function(a){this.exec({method:"session-close"},
function(b){a&&a(b)})}};

View File

@ -1,12 +0,0 @@
transmission.torrents={all:null,puased:null,downloading:null,actively:null,searchResult:null,error:null,warning:null,folders:{},status:{},count:0,totalSize:0,loadSimpleInfo:false,activeTorrentCount:0,pausedTorrentCount:0,fields:{base:"id,name,status,hashString,totalSize,percentDone,addedDate,trackerStats,leftUntilDone,rateDownload,rateUpload,recheckProgress,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,downloadDir,error,errorString,doneDate,queuePosition",
status:"id,status,percentDone,trackerStats,leftUntilDone,rateDownload,rateUpload,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,error,errorString,doneDate,queuePosition",config:"downloadLimit,downloadLimited,peer-limit,seedIdleLimit,seedIdleMode,seedRatioLimit,seedRatioMode,uploadLimit,uploadLimited"},datas:{},recently:null,removed:null,isRecentlyActive:false,newIds:[],getallids:function(b,d,c){var a=this.fields.base;if(this.loadSimpleInfo&&this.all)a=
this.fields.status;a=a.split(",");$.isArray(c)&&$.unique($.merge(a,c));arguments={fields:a};this.isRecentlyActive=false;if(this.all&&d==undefined){arguments.ids="recently-active";this.isRecentlyActive=true}else if(d)arguments.ids=d;if(!this.all)this.all={};transmission.exec({method:"torrent-get",arguments:arguments},function(e){if(e.result=="success"){transmission.torrents.newIds.length=0;transmission.torrents.loadSimpleInfo=true;transmission.torrents.recently=e.arguments.torrents;transmission.torrents.removed=
e.arguments.removed;transmission.torrents.splitid();b&&b(e.arguments.torrents)}else{transmission.torrents.datas=null;b&&b(null)}})},splitid:function(){this.downloading=[];this.puased=[];this.actively=[];this.error=[];this.warning=[];transmission.downloadDirs=[];var b=transmission._status;this.status={};transmission.trackers={};this.totalSize=0;this.folders={};this.count=0;var d=new Base64,c;for(c in this.recently){var a=this.recently[c];this.datas[a.id]=a}var e=[];for(c in this.removed){a=this.removed[c];
e.push(a)}for(c in this.datas){a=this.datas[c];if(!a)return;if($.inArray(a.id,e)!=-1&&e.length>0){if(this.all[a.id]){this.all[a.id]=null;delete this.all[a.id]}this.datas[c]=null;delete this.datas[c]}else{this.isRecentlyActive&&!this.all[a.id]&&this.newIds.push(a.id);a=$.extend(this.all[a.id],a);if(a.uploadedEver==0&&a.downloadedEver==0)a.uploadRatio="∞";a.infoIsLoading=false;var f=this.status[a.status];this.addTracker(a);if(!f){this.status[a.status]=[];f=this.status[a.status]}a.remainingTime=a.rateDownload>
0&&a.leftUntilDone>0?getTotalTime(a.leftUntilDone/a.rateDownload*1E3):a.rateDownload==0&&a.leftUntilDone==0?0:"∞";f.push(a);a.error!=0&&this.error.push(a);if(a.rateUpload>0||a.rateDownload>0)this.actively.push(a);switch(a.status){case b.stopped:this.puased.push(a);break;case b.download:this.downloading.push(a)}this.all[a.id]=a;this.totalSize+=a.totalSize;$.inArray(a.downloadDir,transmission.downloadDirs)==-1&&transmission.downloadDirs.push(a.downloadDir);if(transmission.options.getFolders)if(a.downloadDir){f=
a.downloadDir.split("/");var h="folders-",i;for(i in f){var g=f[i];if(g!=""){h+=d.encode(g);(g=this.folders[h])||(g={count:0,torrents:[],size:0,nodeid:h});g.torrents.push(a);g.count++;g.size+=a.totalSize;this.folders[h]=g}}}this.count++}}transmission.downloadDirs=transmission.downloadDirs.sort();this.newIds.length>0&&this.getallids(null,this.newIds)},addTracker:function(b){var d=b.trackerStats,c=false;b.leecherCount=0;b.seederCount=0;if(d.length>0){for(var a in d){var e=d[a],f=e.lastAnnounceResult.toLowerCase(),
h=e.host.replace("http://","").replace("https://","").split(":")[0].split(".");$.inArray(h[0],"www,tracker".split(","))!=-1&&h.shift();h=h.join(".");var i="tracker-"+h.replace(/\./g,"-"),g=transmission.trackers[i];if(!g){transmission.trackers[i]={count:0,torrents:[],size:0,connected:true};g=transmission.trackers[i]}g.name=h;g.nodeid=i;g.host=e.host;if(f!="success"&&e.announceState!=0){c=true;b.warning=e.lastAnnounceResult;if(f=="could not connect to tracker")g.connected=false}g.torrents.push(b);g.count++;
g.size+=b.totalSize;b.leecherCount+=e.leecherCount;b.seederCount+=e.seederCount}if(c){if(b.nextAnnounceTime){if(b.nextAnnounceTime>e.nextAnnounceTime)b.nextAnnounceTime=e.nextAnnounceTime}else b.nextAnnounceTime=e.nextAnnounceTime;this.warning.push(b)}if(b.leecherCount<0)b.leecherCount=0;if(b.seederCount<0)b.seederCount=0;b.leecher=b.leecherCount+" ("+b.peersGettingFromUs+")";b.seeder=b.seederCount+" ("+b.peersSendingToUs+")"}},getPeers:function(b){transmission.exec({method:"torrent-get",arguments:{fields:"peers,peersFrom".split(","),
ids:b}},function(d){console.log("data:",d)})},getMoreInfos:function(b,d,c){transmission.exec({method:"torrent-get",arguments:{fields:b.split(","),ids:d}},function(a){if(a.result=="success")c&&c(a.arguments.torrents);else c&&c(null)})},search:function(b,d){if(!b)return null;if(!d)d=this.all;var c=[];$.each(d,function(a){d[a].name.toLowerCase().indexOf(b.toLowerCase())!=-1&&c.push(d[a])});return this.searchResult=c},getFiles:function(b,d){transmission.exec({method:"torrent-get",arguments:{fields:"files,fileStats".split(","),
ids:b}},function(c){if(c.result=="success")d&&d(c.arguments.torrents);else d&&d(null)})},getConfig:function(b,d){this.getMoreInfos(this.fields.config,b,d)},getErrorIds:function(b,d){var c=[],a=new Date;if(d==true)a=a.getTime()/1E3;for(var e in this.error){var f=this.error[e];if(!($.inArray(f.id,b)!=-1&&b.length>0)){if(d==true)if(a<f.nextAnnounceTime)continue;f.status!=transmission._status.stopped&&c.push(f.id)}}for(e in this.warning){f=this.warning[e];if(!($.inArray(f.id,b)!=-1&&b.length>0)){if(d==
true)if(a<f.nextAnnounceTime)continue;c.push(f.id)}}return c},searchAndReplaceTrackers:function(b,d,c){if(b&&d){var a={},e=0,f;for(f in this.all){var h=this.all[f];if(!h)return;var i=h.trackerStats,g;for(g in i)if(i[g].announce==b){a[g]||(a[g]={ids:[],tracker:d});a[g].ids.push(h.id);e++}}e==0&&c&&c(null,0);for(f in a)transmission.exec({method:"torrent-set",arguments:{ids:a[f].ids,trackerReplace:[parseInt(f),a[f].tracker]}},function(j,k){if(j.result=="success")c&&c(k,e);else c&&c(null)},a[f].ids)}}};

View File

@ -2,7 +2,7 @@
var system = {
version:"1.1 Beta"
,rootPath: "tr-web-control/"
,codeupdate:"20170317"
,codeupdate:"20170504"
,configHead: "transmission-web-control"
,config:{
autoReload: true

View File

@ -1,240 +0,0 @@
// Current system global object
function pagerFilter(t){"number"==typeof t.length&&"function"==typeof t.splice&&(t={total:t.length,rows:t})
var e=$(this),s=e.datagrid("options"),n=e.datagrid("getPager"),a=e.data("buttons")
n.pagination({onSelectPage:function(a,r){s.pageNumber=a,s.pageSize=r,n.pagination("refresh",{pageNumber:a,pageSize:r}),e.datagrid("loadData",t)},buttons:a}),t.originalRows||(t.originalRows=t.rows)
var r=(s.pageNumber-1)*parseInt(s.pageSize),o=r+parseInt(s.pageSize)
return t.rows=t.originalRows.slice(r,o),t}var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20170317",configHead:"transmission-web-control",config:{autoReload:!0,reloadStep:5e3,pageSize:30,defaultSelectNode:null,autoExpandAttribute:!1,defaultLang:""},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://transmission-control.googlecode.com/svn/resouces/checkupdate.js",contextMenus:{},panel:null,lang:null,reloading:!1,autoReloadTimer:null,downloadDir:"",islocal:!1,B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},setlang:function(t,e){t||(t=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage),t||(t="zh-CN"),t.indexOf("-")!=-1&&(t=t.split("-")[0].toLocaleLowerCase()+"-"+t.split("-")[1].toLocaleUpperCase()),this.languages[t]||(t="en"),$.getScript(system.rootPath+"lang/"+t+".js",function(){system.lang=$.extend(!0,system.defaultLang,system.lang),system.resetLangText(),$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+t.replace("-","_")+".js").done(function(t,s){e&&e()}).fail(function(t,s,n){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){e&&e()})})})},init:function(t,e,s){this.readConfig(),this.islocal=1==e,this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),body:$("#m_body"),layout_body:$("#layout_body"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")},null==this.lang?this.setlang(t,function(){system.initdata()}):this.initdata()},resetLangText:function(parent){parent||(parent=$)
var items=parent.find("*[system-lang]")
$.each(items,function(key,item){var name=$(item).attr("system-lang")
"["==name.substr(0,1)?$(item).html(eval("system.lang"+name)):$(item).html(eval("system.lang."+name))}),items=parent.find("*[system-tip-lang]"),$.each(items,function(key,item){var name=$(item).attr("system-tip-lang")
"["==name.substr(0,1)?$(item).attr("title",eval("system.lang"+name)):$(item).attr("title",eval("system.lang."+name))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version)
var t=new Array,e="<span>"+this.lang.title.left+"</span>"
t.push("<span class='tree-title-toolbar'>")
for(var s in this.lang.tree.toolbar.nav){var n=this.lang.tree.toolbar.nav[s]
t.push('<a href="javascript:void(0);" id="tree-toolbar-nav-'+s+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+n+"</a>")}if(t.push("</span>"),t.length>1){e+=t.join(""),this.panel.left_layout.panel("setTitle",e)
for(var s in this.lang.tree.toolbar.nav)$("#tree-toolbar-nav-"+s).linkbutton()}else this.panel.left_layout.panel("setTitle",e)
e="<span>"+this.lang.title.list+"</span>",t.length=0,t.push("<span class='tree-title-toolbar'>")
for(var s in this.lang["torrent-head"].buttons){var n=this.lang["torrent-head"].buttons[s]
t.push('<a href="javascript:void(0);" id="torrent-head-buttons-'+s+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+n+"</a>")}if(t.push("</span>"),t.length>1){e+=t.join(""),this.panel.body.panel("setTitle",e)
for(var s in this.lang["torrent-head"].buttons)switch($("#torrent-head-buttons-"+s).linkbutton(),s){case"autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}else this.panel.body.panel("setTitle",e)
this.panel.status.panel("setTitle",this.lang.title.status),this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){0!=system.currentTorrentId&&$(this).data("isload")?system.getTorrentInfos(system.currentTorrentId):system.clearTorrentAttribute()},onLoad:function(){$(this).data("isload")||($(this).data("isload",!0),0!=system.currentTorrentId&&setTimeout(function(){system.getTorrentInfos(system.currentTorrentId)},500))}}),$.each(this.languages,function(t,e){$("<option/>").text(e).val(t).attr("selected",t==system.lang.name).appendTo(system.panel.top.find("#lang"))}),this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value}),this.panel.toolbar.attr("class","panel-header"),this.initTree(),this.initToolbar(),this.initStatusBar(),this.initTorrentTable(),this.connect(),this.initEvent()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")}),this.panel.droparea[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.debug("#dropArea.dragover")},!1),this.panel.list[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.show(),system.debug("dragover")},!1),this.panel.droparea[0].addEventListener("drop",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.hide(),system.debug("drop.e.dataTransfer:",t.dataTransfer),system.checkDropFiles(t.dataTransfer.files)},!1),this.panel.droparea[0].addEventListener("dragleave",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.hide(),system.debug("dragleave")},!1),$("#text-drop-title").html(this.lang.public["text-drop-title"])},navToolbarClick:function(t){var e=t.id,s=$(t).data("status"),n=null
switch(e){case"tree-toolbar-nav-folders":n=this.panel.left.tree("find","folders")
break
case"tree-toolbar-nav-statistics":n=this.panel.left.tree("find","statistics")
break
case"torrent-head-buttons-autoExpandAttribute":n={},n.target=null,1==s?this.config.autoExpandAttribute=!1:this.config.autoExpandAttribute=!0}n&&(1==s?($(t).linkbutton({iconCls:"icon-disabled"}),$(n.target).parent().hide(),s=0):($(t).linkbutton({iconCls:"icon-enabled"}),$(n.target).parent().show(),s=1),$(t).data("status",s),this.saveConfig())},checkDropFiles:function(t){if(t&&t.length){for(var e=new Array,s=0;s<t.length;s++){var n=t[s]
"torrent"==n.name.split(".").pop().toLowerCase()&&e.push(n)}e.length>0&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:300,resizable:!0},datas:{files:e}})}},initTree:function(){this.panel.left.tree({data:[{id:"torrent-all",iconCls:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(t){system.loadTorrentToList({node:t})},lines:!0})
for(var t in this.lang.tree.toolbar.nav){var e=this.panel.left.tree("find",t)
$(e.target).parent().hide()}if(this.config.defaultSelectNode){var s=this.panel.left.tree("find",this.config.defaultSelectNode)
s&&this.panel.left.tree("select",s.target)}},initTorrentTable:function(){function t(){e&&$(e).remove(),e=$("<div/>").appendTo("body"),e.menu({onClick:function(t){"icon-ok"==t.iconCls?(system.control.torrentlist.datagrid("hideColumn",t.name),e.menu("setIcon",{target:t.target,iconCls:"icon-empty"})):(system.control.torrentlist.datagrid("showColumn",t.name),e.menu("setIcon",{target:t.target,iconCls:"icon-ok"})),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()}})
for(var t=system.control.torrentlist.datagrid("getColumnFields"),s=0;s<t.length;s++){var n=t[s],a=system.control.torrentlist.datagrid("getColumnOption",n)
0!=a.allowCustom&&"false"!=a.allowCustom&&e.menu("appendItem",{text:a.title,name:n,iconCls:a.hidden?"icon-empty":"icon-ok"})}}this.control.torrentlist=$("<table/>").attr("class","torrent-list").appendTo(this.panel.list)
var e=null,s=-1,n=!1
$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(a){var r=a.fields
0!=system.userConfig.torrentList.fields.length&&(r=system.userConfig.torrentList.fields)
var o=JSON.stringify(r)
system.userConfig.torrentList.fields=JSON.parse(o)
for(var i in r)r[i].title=system.lang.torrent.fields[r[i].field]||r[i].field,system.setFieldFormat(r[i])
system.control.torrentlist.datagrid({autoRowHeight:!1,pagination:!0,rownumbers:!0,remoteSort:!1,checkOnSelect:!1,pageSize:system.config.pageSize,idField:"id",fit:!0,striped:!0,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:!0,columns:[r],onCheck:function(t,e){system.checkTorrentRow(t,e)},onUncheck:function(t,e){system.checkTorrentRow(t,e)},onCheckAll:function(t){system.checkTorrentRow("all",!1)},onUncheckAll:function(t){system.checkTorrentRow("all",!0)},onSelect:function(t,e){s!=-1&&(n=!0,system.control.torrentlist.datagrid("unselectRow",s),n=!1),system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south"),system.getTorrentInfos(e.id),s=t},onUnselect:function(t,e){system.config.autoExpandAttribute&&0==n&&(system.panel.attribute.panel("options").collapsed||system.panel.layout_body.layout("collapse","south")),system.currentTorrentId=0,s=-1},onBeforeLoad:function(t){system.currentTorrentId=0},onSortColumn:function(t,e){var s=t
"remainingTime"==t&&(s="remainingTimeRaw")
var n=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(s,e))
system.control.torrentlist.datagrid("loadData",n),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.userConfig.torrentList.sortName=t,system.userConfig.torrentList.sortOrder=e,system.saveUserConfig()},onRowContextMenu:function(t,e,s){system.control.torrentlist.datagrid("uncheckAll"),system.control.torrentlist.datagrid("checkRow",e),t.preventDefault(),system.showContextMenu("torrent-list",t)},onHeadDrop:function(t,e){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onResizeColumn:function(t,e){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onHeaderContextMenu:function(s,n){s.preventDefault(),e||t(),e.menu("show",{left:s.pageX,top:s.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(t){var e={}
$.each(this.userConfig.torrentList.fields,function(t,s){e[s.field]=s}),this.userConfig.torrentList.fields=[],$.each(t,function(t,s){var n=$.extend({},e[s.field])
n.width=s.width,n.hidden=s.hidden,system.userConfig.torrentList.fields.push(n)})},showContextMenu:function(t,e){var s=this.contextMenus[t]
s?s.empty():(s=$("<div/>").attr("class","easyui-menu").css({width:"180px"}).appendTo(this.panel.main),this.contextMenus[t]=s,s.menu())
var n=null
switch(t){case"torrent-list":n=new Array("start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom")
var a=this.panel.toolbar
for(var r in n){var o=n[r]
if("-"==o)$("<div class='menu-sep'></div>").appendTo(s)
else{var i=a.find("#toolbar_"+o)
i.length>0?s.menu("appendItem",{text:i.attr("title"),id:o,iconCls:i.linkbutton("options").iconCls,disabled:i.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(i=$("#"+o),i.length>0&&s.menu("appendItem",{text:i.attr("title"),id:o,iconCls:i.attr("id").replace("menu","icon"),disabled:a.find("#toolbar_changeDownloadDir").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})),i=null}}}s.menu("show",{left:e.pageX,top:e.pageY}),s=null,n=null},checkTorrentRow:function(t,e){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_queue").menubutton("enable")},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]),this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]),this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/1e3,min:3,disabled:!this.config.autoReload,onChange:function(){var t=this.value
$.isNumeric(t)&&(system.config.reloadStep=1e3*t,system.saveConfig())}}),this.panel.toolbar.find("#toolbar_autoreload").linkbutton({text:this.config.autoReload?this.lang.toolbar["autoreload-enabled"]:this.lang.toolbar["autoreload-disabled"],iconCls:this.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",this.config.autoReload?this.lang.toolbar.tip["autoreload-disabled"]:this.lang.toolbar.tip["autoreload-enabled"]).click(function(){system.config.autoReload?(system.config.autoReload=!1,clearTimeout(system.autoReloadTimer),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")):(system.config.autoReload=!0,system.reloadData(),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("enable")),system.saveConfig(),$(this).linkbutton({text:system.config.autoReload?system.lang.toolbar["autoreload-enabled"]:system.lang.toolbar["autoreload-disabled"],iconCls:system.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",system.config.autoReload?system.lang.toolbar.tip["autoreload-disabled"]:system.lang.toolbar.tip["autoreload-enabled"])}),this.panel.toolbar.find("#toolbar_add_torrents").linkbutton({text:this.lang.toolbar["add-torrent"],disabled:!1}).attr("title",this.lang.toolbar.tip["add-torrent"]).click(function(){system.openDialogFromTemplate({id:"dialog-torrent-add",options:{title:system.lang.toolbar["add-torrent"],width:620,height:400,resizable:!0}})}),this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var t=$(this),e=t.linkbutton("options").iconCls
t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-start"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=null})}),this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var t=$(this),e=t.linkbutton("options").iconCls
t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-stop"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=null})}),this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.recheck).click(function(){var t=system.control.torrentlist.datagrid("getChecked")
if(t.length>0)if(1==t.length){var e=transmission.torrents.all[t[0].id]
e.percentDone>0?confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this)):system.changeSelectedTorrentStatus("verify",$(this))}else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!0}).click(function(){system.changeSelectedTorrentStatus("reannounce",$(this))}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.remove).click(function(){var t=system.control.torrentlist.datagrid("getChecked"),e=new Array
for(var s in t)e.push(t[s].id)
0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!0}).click(function(){var t=system.control.torrentlist.datagrid("getChecked")
0!=t.length&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:!0},datas:{id:t[0].id}})}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var t=system.control.torrentlist.datagrid("getChecked"),e=new Array
for(var s in t)e.push(t[s].id)
0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var t=$(this),e=t.linkbutton("options"),s=!1
"icon-alt-speed-false"==e.iconCls&&(s=!0),transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":s}},function(e){"success"==e.result&&(system.serverConfig["alt-speed-enabled"]=s,t.linkbutton({iconCls:"icon-alt-speed-"+s.toString()}),s?$("#status_alt_speed").show():$("#status_alt_speed").hide())}),t.linkbutton({iconCls:"icon-loading"})}),this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:!0}})}),this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()}),this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(t){system.searchTorrents(t)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed),this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0),transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()},transmission.on.postError=function(){},transmission.init({islocal:!0},function(){system.reloadSession(!0),system.getServerStatus()})},reloadSession:function(t){transmission.getSession(function(e){system.serverConfig=e,$("#status_version").html("Transmission "+system.lang.statusbar.version+e.version+", RPC: "+e["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")"),1==e["alt-speed-enabled"]?(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-true"}),$("#status_alt_speed").show()):(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-false"}),$("#status_alt_speed").hide()),system.downloadDir=e["download-dir"],0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir),parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(t){system.serverConfig["download-dir-free-space"]=t.arguments["size-bytes"],system.showFreeSpace(t.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]),t&&system.showStatus(system.lang.system.status.connected)})},showFreeSpace:function(t){var e=t
e=e==-1?system.lang.public["text-unknown"]:formatSize(e),$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+e)},reloadTorrentBaseInfos:function(t,e){if(!this.reloading){clearTimeout(this.autoReloadTimer),this.reloading=!0
var s={trackers:transmission.trackers,folders:transmission.torrents.folders}
transmission.torrents.getallids(function(t){var e=new Array
for(var n in t){var a=t[n]
e.push(a.id)}var r=transmission.torrents.getErrorIds(e,!0)
r.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(s)},r):system.resetTorrentInfos(s)},t,e)}},resetTorrentInfos:function(t){var e=this.currentTorrentId,s=this.panel.left.tree("find","servers")
if(s){var n=s.state
this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers"}]),s=this.panel.left.tree("find","servers")
new Array
for(var a in transmission.trackers){var r=transmission.trackers[a],o=system.panel.left.tree("find",r.nodeid),i=r.name+this.showNodeMoreInfos(r.count,r.size)
o?system.updateTreeNodeText(r.nodeid,i,r.connected?"icon-server":"icon-server-error"):system.appendTreeNode(s,[{id:r.nodeid,text:i,iconCls:r.connected?"icon-server":"icon-server-error"}]),t.trackers[r.nodeid]=null}"closed"==n&&this.panel.left.tree("collapse",s.target)
for(var a in t.trackers){var r=t.trackers[a]
r&&system.removeTreeNode(r.nodeid)}if(transmission.torrents.status[transmission._status.stopped]?system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length)):system.updateTreeNodeText("paused",system.lang.tree.paused),transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending),transmission.torrents.status[transmission._status.seedwait]){var o=system.panel.left.tree("find","sending"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"seedwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("seedwait")
if(transmission.torrents.status[transmission._status.check]?system.updateTreeNodeText("check",system.lang.tree.check+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.check].length)):system.updateTreeNodeText("check",system.lang.tree.check),transmission.torrents.status[transmission._status.checkwait]){var o=system.panel.left.tree("find","check"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"checkwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("checkwait")
if(transmission.torrents.status[transmission._status.download]?system.updateTreeNodeText("downloading",system.lang.tree.downloading+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.download].length)):system.updateTreeNodeText("downloading",system.lang.tree.downloading),transmission.torrents.status[transmission._status.downloadwait]){var o=system.panel.left.tree("find","downloading"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"downloadwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("downloadwait")
system.updateTreeNodeText("actively",system.lang.tree.actively+this.showNodeMoreInfos(transmission.torrents.actively.length)),system.updateTreeNodeText("error",system.lang.tree.error+this.showNodeMoreInfos(transmission.torrents.error.length)),system.updateTreeNodeText("warning",system.lang.tree.warning+this.showNodeMoreInfos(transmission.torrents.warning.length))
var o=system.panel.left.tree("getSelected")
if(null!=o){var d=system.control.torrentlist.datagrid("options").pageNumber
system.loadTorrentToList({node:o,page:d})}0!=e&&system.control.torrentlist.datagrid("selectRecord",e),system.reloading=!1,system.config.autoReload&&(system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep)),system.updateTreeNodeText("torrent-all",system.lang.tree.all+this.showNodeMoreInfos(transmission.torrents.count,transmission.torrents.totalSize))
var c="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",")
$.each(c,function(t,e){switch(e){case"uploadedBytes":case"downloadedBytes":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+formatSize(system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+formatSize(system.serverSessionStats["current-stats"][e]))
break
case"secondsActive":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+getTotalTime(1e3*system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+getTotalTime(1e3*system.serverSessionStats["current-stats"][e]))
break
default:system.updateTreeNodeText(e,system.lang.tree.statistics[e]+system.serverSessionStats["cumulative-stats"][e]),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+system.serverSessionStats["current-stats"][e])}})
for(var a in transmission.torrents.folders){var u=transmission.torrents.folders[a]
t.folders[u.nodeid]=null}this.loadFolderList(t.folders),navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(t,e){var s=""
return t>0&&(s=" <span class='nav-torrents-number'>("+t+")</span>"),e>0&&(s+="<span class='nav-total-size'>["+formatSize(e)+"]</span>"),s},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(t){if(system.reloading=!1,$("#status_downloadspeed").html(formatSize(t.downloadSpeed,!1,"speed")),$("#status_uploadspeed").html(formatSize(t.uploadSpeed,!1,"speed")),system.serverSessionStats=t,0==t.torrentCount){var e=system.panel.left.tree("find","servers")
e&&system.panel.left.tree("remove",e.target),system.updateTreeNodeText("torrent-all",system.lang.tree.all)}}))},showStatus:function(t,e){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south"),this.panel.status_text.show(),this.panel.status_text.html(t),0!=e&&(void 0==e&&(e=3e3),this.panel.status_text.fadeOut(e,function(){$("#layout_left").layout("collapse","south")}))},updateTreeNodeText:function(t,e,s){var n=this.panel.left.tree("find",t)
if(n){var a={target:n.target,text:e}
void 0!=s&&(a.iconCls=s),this.panel.left.tree("update",a)}n=null},appendTreeNode:function(t,e){var s=null
s="string"==typeof t?this.panel.left.tree("find",t):t,s?this.panel.left.tree("append",{parent:s.target,data:e}):this.panel.left.tree("append",{data:e}),s=null},removeTreeNode:function(t){var e=this.panel.left.tree("find",t)
e&&this.panel.left.tree("remove",e.target),e=null},loadTorrentToList:function(t){if(transmission.torrents.all){var e={node:null,page:1}
if(jQuery.extend(e,t),t.node){var s=null,n=this.panel.left.tree("getParent",t.node.target)||{id:""},a=this.panel.left.data("currentNodeId")
switch(a!=t.node.id&&(this.control.torrentlist.datagrid({pageNumber:1}),a=t.node.id),this.panel.left.data("currentNodeId",a),n.id){case"servers":s=transmission.trackers[t.node.id].torrents
break
default:switch(t.node.id){case"torrent-all":case"servers":s=transmission.torrents.all
break
case"paused":s=transmission.torrents.status[transmission._status.stopped]
break
case"sending":s=transmission.torrents.status[transmission._status.seed]
break
case"seedwait":s=transmission.torrents.status[transmission._status.seedwait]
break
case"check":s=transmission.torrents.status[transmission._status.check]
break
case"checkwait":s=transmission.torrents.status[transmission._status.checkwait]
break
case"downloading":s=transmission.torrents.status[transmission._status.download]
break
case"downloadwait":s=transmission.torrents.status[transmission._status.downloadwait]
break
case"actively":s=transmission.torrents.actively
break
case"error":s=transmission.torrents.error
break
case"warning":s=transmission.torrents.warning
break
case"search-result":s=transmission.torrents.searchResult
break
default:if(t.node.id.indexOf("folders-")!=-1){var r=transmission.torrents.folders[t.node.id]
r&&(s=r.torrents)}}}this.config.defaultSelectNode!=t.node.id&&(this.control.torrentlist.datagrid("loadData",[]),this.config.defaultSelectNode=t.node.id,this.saveConfig())
var o=new Array
for(var i in s){if(!s[i])return
var l=this.lang.torrent["status-text"][s[i].status],d=parseFloat(100*s[i].percentDone).toFixed(2)
l==transmission._status.check&&(d=parseFloat(100*s[i].recheckProgress).toFixed(2)),0!=s[i].error?l="<span class='text-status-error'>"+l+"</span>":s[i].warning&&(l="<span class='text-status-warning' title='"+s[i].warning+"'>"+l+"</span>")
var c={}
c=$.extend(c,s[i]),c.status=l,c.statusCode=s[i].status,c.completeSize=Math.max(0,s[i].totalSize-s[i].leftUntilDone),c.leecherCount=s[i].leecher,c.seederCount=s[i].seeder,o.push(c)}this.updateTorrentCurrentPageDatas(o)}}},updateTorrentCurrentPageDatas:function(t){var e=this.control.torrentlist.datagrid("getRows")
if(0==t.length&&e.length>0)return void this.control.torrentlist.datagrid("loadData",[])
var s=this.control.torrentlist.datagrid("options"),n=null
if(s.sortName){n=s.sortName
var a=n
"remainingTime"==n&&(a="remainingTimeRaw"),t=t.sort(arrayObjectSort(a,s.sortOrder))}if(0==e.length||t.length!=this.control.torrentlist.datagrid("getData").total&&t.length>s.pageSize)return void this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:s.pageNumber,sortName:n,sortOrder:s.sortOrder}).datagrid("loadData",t)
this.control.torrentlist.datagrid("getData").originalRows=t
var r=(s.pageNumber-1)*parseInt(s.pageSize),o=r+parseInt(s.pageSize)
t=t.slice(r,o)
var i={},l={}
for(var d in transmission.torrents.recently){var c=transmission.torrents.recently[d]
i[c.id]=!0,c=null}for(var d in t){var c=t[d]
l[c.id]=c,c=null}for(var u={},d=e.length-1;d>=0;d--){var c=e[d],m=l[c.id]
m?i[c.id]?(this.control.torrentlist.datagrid("updateRow",{index:d,row:m}),u[c.id]=c):transmission.torrents.removed&&transmission.torrents.removed.length>0&&$.inArray(c.id,transmission.torrents.removed)!=-1?this.control.torrentlist.datagrid("deleteRow",d):u[c.id]=c:this.control.torrentlist.datagrid("deleteRow",d),c=null,m=null}for(var d in t){var c=t[d]
u[c.id]||this.control.torrentlist.datagrid("appendRow",c)}e=null,i=null,l=null},getTorrentNameBar:function(t){var e="",s=t.name
switch(t.status){case transmission._status.stopped:e="iconlabel icon-pause-small"
break
case transmission._status.check:e="iconlabel icon-checking"
break
case transmission._status.download:e="iconlabel icon-down"
break
case transmission._status.seed:e="iconlabel icon-up"
break
case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:e="iconlabel icon-wait"}return s+="\n"+t.downloadDir,t.warning&&(e="iconlabel icon-warning-type1",s+="\n\n"+this.lang.public["text-info"]+": "+t.warning),0!=t.error&&(e="iconlabel icon-exclamation",s+="\n\n"+this.lang.public["text-info"]+": "+t.errorString),'<span class="'+e+'" title="'+s+'">'+t.name+"</span>"},getTorrentProgressBar:function(t,e){t+="%"
var s="",n=0
switch(n="object"==typeof e?e.status:e){case transmission._status.stopped:s="torrent-progress-stop"
break
case transmission._status.checkwait:case transmission._status.check:s="torrent-progress-check"
break
case transmission._status.downloadwait:case transmission._status.download:s="torrent-progress-download"
break
case transmission._status.seedwait:case transmission._status.seed:s="torrent-progress-seed"}return"object"==typeof e&&(e.warning&&(s="torrent-progress-warning"),0!=e.error&&(s="torrent-progress-error")),'<div class="torrent-progress" title="'+t+'"><div class="torrent-progress-text">'+t+'</div><div class="torrent-progress-bar '+s+'" style="width:'+t+';"></div></div>'},addTorrentsToServer:function(t,e,s,n){var a=e-t.length,r=t.shift()
return r?(this.showStatus(this.lang.system.status.queue+(a+1)+"/"+e+"<br/>"+r,0),void transmission.addTorrentFromUrl(r,n,s,function(a){system.addTorrentsToServer(t,e,s,n)})):(this.showStatus(this.lang.system.status.queuefinish),void this.getServerStatus())},changeSelectedTorrentStatus:function(t,e,s){var n=this.control.torrentlist.datagrid("getChecked"),a=new Array
t||(t="start")
for(var r in n)a.push(n[r].id)
if(s||(s="torrent-"+t),a.length>0){if(e){var o=e.linkbutton("options").iconCls
e.linkbutton({disabled:!0,iconCls:"icon-loading"})}transmission.exec({method:s,arguments:{ids:a}},function(t){e&&e.linkbutton({iconCls:o}),system.control.torrentlist.datagrid("uncheckAll"),system.reloadTorrentBaseInfos()})}},searchTorrents:function(t){if(""!=t){var e=transmission.torrents.search(t)
if(null==e||0==e.length)return void this.removeTreeNode("search-result")
var s=this.panel.left.tree("find","search-result"),n=this.lang.tree["search-result"]+" : "+t+" ("+e.length+")"
null==s?(this.appendTreeNode("torrent-all",[{id:"search-result",text:n,iconCls:"icon-search"}]),s=this.panel.left.tree("find","search-result")):this.panel.left.tree("update",{target:s.target,text:n}),this.panel.left.tree("select",s.target)}},getTorrentInfos:function(t){if(transmission.torrents.all[t]&&!transmission.torrents.all[t].infoIsLoading&&!(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]&&transmission.torrents.all[this.currentTorrentId].infoIsLoading||(this.currentTorrentId=t,this.panel.attribute.panel("options").collapsed))){var e=transmission.torrents.all[t]
e.infoIsLoading=!0
var s="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString"
e.moreInfosTag||(s+=",files,trackers,comment,dateCreated,creator,downloadDir"),transmission.torrents.getMoreInfos(s,t,function(s){if(e.infoIsLoading=!1,null!=s){if(jQuery.extend(e,s[0]),0==system.currentTorrentId||system.currentTorrentId!=t)return void system.clearTorrentAttribute()
e.completeSize=e.totalSize-e.leftUntilDone,e.moreInfosTag=!0,system.fillTorrentBaseInfos(e),system.fillTorrentFileList(e),system.fillTorrentServerList(e),system.fillTorrentPeersList(e),system.fillTorrentConfig(e),transmission.torrents.all[t]=e,transmission.torrents.datas[t]=e}})}},clearTorrentAttribute:function(){system.panel.attribute.find("#torrent-files-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-servers-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-peers-table").datagrid("loadData",[]),system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(t,e,s){var n=s.datagrid("getRows"),a=s.datagrid("options"),r=null
if(a.sortName&&(r=a.sortName,e=e.sort(arrayObjectSort(r,a.sortOrder))),0==n.length||e.length!=s.datagrid("getData").total&&e.length>a.pageSize)return void s.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:r,sortOrder:a.sortOrder}).datagrid("loadData",e)
s.datagrid("getData").originalRows=e
var o=(a.pageNumber-1)*parseInt(a.pageSize),i=o+parseInt(a.pageSize)
e=e.slice(o,i)
var l={}
for(var d in e){var c=e[d]
l[c[t]]=c,c=null}for(var d=n.length-1;d>=0;d--){var c=n[d],u=l[c[t]]
u?s.datagrid("updateRow",{index:d,row:u}):s.datagrid("deleteRow",d),u=null,c=null}},fillTorrentBaseInfos:function(t){$.each(t,function(t,e){switch(t){case"rateDownload":case"rateUpload":e=formatSize(e,!0,"speed")
break
case"totalSize":case"uploadedEver":case"leftUntilDone":case"completeSize":e=formatSize(e)
break
case"addedDate":case"dateCreated":case"doneDate":e=formatLongTime(e)
break
case"status":e=system.lang.torrent["status-text"][e]
break
case"error":0==e?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show()
break
case"comment":e=system.replaceURI(e)}system.panel.attribute.find("#torrent-attribute-value-"+t).html(e)})},fillTorrentFileList:function(t){var e=t.files,s=t.fileStats,n=new Array,a=t.name.length+1
for(var r in e){var o=e[r],i=s[r],l=parseFloat(i.bytesCompleted/o.length*100).toFixed(2)
n.push({name:o.name==t.name?o.name:o.name.substr(a),index:r,bytesCompleted:i.bytesCompleted,percentDone:system.getTorrentProgressBar(l,transmission._status.download),length:o.length,wanted:system.lang.torrent.attribute.status[i.wanted],priority:'<span class="iconlabel icon-flag-'+i.priority+'">'+system.lang.torrent.attribute.priority[i.priority]+"</span>"})}this.updateCurrentPageDatas("index",n,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(t){var e=t.trackers,s=t.trackerStats,n=new Array
for(var a in e){var r=(e[a],s[a]),o={}
for(var i in r)switch(i){case"lastAnnounceTime":case"nextAnnounceTime":o[i]=formatLongTime(r[i])
break
case"lastAnnounceSucceeded":case"lastAnnounceTimedOut":o[i]=system.lang.torrent.attribute.status[r[i]]
break
default:o[i]=r[i]}n.push(o)}transmission.torrents.addTracker(t),this.updateCurrentPageDatas("id",n,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(t){var e=t.peers,s=new Array
for(var n in e){var a=e[n],r={}
for(var o in a)r[o]=a[o]
var i=parseFloat(100*a.progress).toFixed(2)
r.progress=system.getTorrentProgressBar(i,transmission._status.download),s.push(r)}this.updateCurrentPageDatas("address",s,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(t){4==system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")&&transmission.torrents.getConfig(t.id,function(t){if(null!=t){var e=transmission.torrents.all[system.currentTorrentId]
jQuery.extend(e,t[0]),0!=system.currentTorrentId&&$.each(t[0],function(t,e){var s=!1,n=!1,a=!1
switch(t){case"seedIdleMode":case"seedRatioMode":0==e&&(n=!1,s=!0),a=!0
case"downloadLimited":case"uploadLimited":1!=e&&1!=e||(n=!0),system.panel.attribute.find("input[enabledof='"+t+"']").prop("disabled",!n),a&&system.panel.attribute.find("#"+t).prop("indeterminate",s).data("_tag",e),system.panel.attribute.find("#"+t).prop("checked",n)
break
default:system.panel.attribute.find("#"+t).val(e),system.panel.attribute.find("#"+t).numberspinner("setValue",e)}})}})},setFieldFormat:function(t){if(t.formatter)switch(t.formatter){case"size":t.formatter=function(t,e,s){return formatSize(t)}
break
case"speed":t.formatter=function(t,e,s){return formatSize(t,!0,"speed")}
break
case"longtime":t.formatter=function(t,e,s){return formatLongTime(t)}
break
case"progress":t.formatter=function(t,e,s){var n=parseFloat(100*t).toFixed(2)
return system.getTorrentProgressBar(n,transmission.torrents.all[e.id])}
break
case"_usename_":switch(t.field){case"name":t.formatter=function(t,e,s){return system.getTorrentNameBar(transmission.torrents.all[e.id])}}}},reloadData:function(){this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos(),this.checkTorrentRow("all",!1)},loadFolderList:function(t){this.removeTreeNode("folders-loading")
for(var e in t){var s=t[e]
s&&system.removeTreeNode(s.nodeid)}0!=transmission.downloadDirs.length&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})})},appendFolder:function(t){if(t){var e="folders",s=e,n=t.split("/"),a=e+"-"
for(var r in n){var o=n[r]
if(""!=o){a+=this.B64.encode(o)
var i=this.panel.left.tree("find",a),l=transmission.torrents.folders[a],d=o+this.showNodeMoreInfos(l.count,l.size)
i?this.updateTreeNodeText(a,d):(this.appendTreeNode(s,[{id:a,text:d}]),s!=e&&(i=this.panel.left.tree("find",s),this.panel.left.tree("collapse",i.target))),s=a}}}},replaceURI:function(t){var e=/(http|https|ftp):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi
return t.replace(e,function(t){return'<a href="'+t+'" target="_blank">'+t+"</a>"})},readConfig:function(){this.readUserConfig()
var t=cookies.get(this.configHead)
$.isPlainObject(t)&&(this.config=$.extend(this.config,t))
for(var e in this.storageKeys.dictionary)this.dictionary[e]=this.getStorageData(this.storageKeys.dictionary[e])},saveConfig:function(){cookies.set(this.configHead,this.config,100)
for(var t in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[t],this.dictionary[t])
this.saveUserConfig()},readUserConfig:function(){var t=window.localStorage[this.configHead]
if(t){var e=JSON.parse(t)
this.userConfig=$.extend(!0,this.userConfig,e)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(t,e,s,n){if(window.FileReader){var a=$("input[id='"+t+"']")[0].files
$.each(a,function(t,r){transmission.addTorrentFromFile(r,e,s,n,a.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.getScript(this.checkUpdateScript,function(){system.codeupdate<system.lastUpdateInfos.update?($("#area-update-infos").show(),$("#msg-updateInfos").html(system.lastUpdateInfos.update+" -> "+system.lastUpdateInfos.infos)):$("#area-update-infos").hide()})},changeLanguages:function(t){t!=this.lang.name&&t&&(this.config.defaultLang=t,this.saveConfig(),location.href="?lang="+t)},getStorageData:function(t,e){return null==window.localStorage[t]?e:window.localStorage[t]},setStorageData:function(t,e){window.localStorage[t]=e},openDialogFromTemplate:function(t){var e={id:null,options:null,datas:null}
if(t=$.extend(!0,e,t),null!=t.id){var s=t.id,n=t.options,a=t.datas,r=$("#"+s)
if(r.length)return r.dialog("open"),a&&$.each(a,function(t,e){r.data(t,e)}),void r.dialog({content:system.templates[s]})
var o={title:"",width:100,height:100,resizable:!1,cache:!0,content:"loading...",modal:!0}
n=$.extend(!0,o,n),$("<div/>").attr("id",s).appendTo(document.body).dialog(n),$.get(system.rootPath+"template/"+s+".html?time="+new Date,function(t){system.templates[s]=t,a&&$.each(a,function(t,e){$("#"+s).data(t,e)}),$("#"+s).dialog({content:t})})}},debug:function(t,e){window.console&&window.console.log&&window.console.log(t,e)}}
$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js"),$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})})

View File

@ -397,13 +397,17 @@
thisDialog.find("#download-dir-free-space").text(tmp);
// Local dictionary folder list
var downloadDirs = $.merge([],transmission.downloadDirs);
if (system.dictionary.folders.length!=0)
{
$.extend(downloadDirs,system.dictionary.folders.split("\n"));
}
downloadDirs = uniq(downloadDirs);
thisDialog.find("#local-storage-dictionary-folders").val(downloadDirs.join("\n"));
thisDialog.find("#local-storage-dictionary-folders").val(transmission.downloadDirs);
// Will add back this feature if the bug solved
//var downloadDirs = $.merge([],transmission.downloadDirs);
//if (system.dictionary.folders.length!=0)
//{
// $.extend(downloadDirs,system.dictionary.folders.split("\n"));
//}
//downloadDirs = uniq(downloadDirs);
//thisDialog.find("#local-storage-dictionary-folders").val(downloadDirs.join("\n"));
//thisDialog.find("#local-storage-dictionary-folders").val(transmission.downloadDirs);
// Cancel
thisDialog.find("#system-config-button-cancel").click(function()
@ -641,4 +645,4 @@
});
});
})($("#dialog-system-config"));
</script>
</script>