1、增加界面状态记忆功能;

2、增加复制保存目录到剪切板功能;
3、修复加载本地配置时,默认值未应用的BUG;
This commit is contained in:
ronggang 2018-03-28 11:01:52 +08:00
parent 198c595bf1
commit b6cfdb4bff
7 changed files with 243 additions and 117 deletions

3
.gitignore vendored
View File

@ -5,4 +5,5 @@
node_modules
package.json
Gruntfile.js
.DS_Store
.DS_Store
testFile/

View File

@ -14,7 +14,7 @@
<link id="styleEasyui" rel="stylesheet" type="text/css" href="tr-web-control/script/easyui/themes/default/easyui.css?v=20180312"/>
<link rel="stylesheet" type="text/css" href="tr-web-control/script/easyui/themes/icon.css?v=20180312"/>
<link rel="stylesheet" type="text/css" href="tr-web-control/style/icon.custom.css?v=20180312"/>
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_584244_dgegcjrqys7tlnmi.css"/>
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_584244_ggookhq7noyzm2t9.css"/>
<!-- Base class library -->
<script type="text/javascript" src="tr-web-control/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="tr-web-control/script/jquery/jquery.form.js"></script>
@ -24,6 +24,7 @@
<script type="text/javascript" src="tr-web-control/script/easyui/plugins/jquery.datagrid.drophead.js"></script>
<!-- -->
<!-- System class library -->
<script type="text/javascript" src="tr-web-control/script/min/clipboard.min.js"></script>
<script type="text/javascript" src="tr-web-control/script/min/public.min.js?v=20180312"></script>
<script type="text/javascript" src="tr-web-control/script/min/ua-parser.min.js?v=20180312"></script>
<script type="text/javascript" src="tr-web-control/script/min/transmission.min.js?v=20180312"></script>
@ -103,6 +104,8 @@
<a id="toolbar_morepeers" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-more-peers',plain:true,disabled:true" system-tip-lang="toolbar.tip['more-peers']"></a>
<!-- 设置下载目录 -->
<a id="toolbar_changeDownloadDir" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-folder-change',plain:true,disabled:true"></a>
<!-- 复制下载目录 -->
<a id="toolbar_copyPath" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-clippy',plain:true,disabled:true" data-clipboard-action="copy" data-clipboard-target="#clipboard-source"></a>
<span class="button-split">|</span>
<!-- 队列 -->
<a id="toolbar_queue" href="#" class="easyui-menubutton" data-options="menu:'#menu-queue',iconCls:'iconfont tr-icon-queue-move',disabled:true" system-tip-lang="toolbar.queue"></a>
@ -162,5 +165,6 @@
<div id="menu-plugin-tracker-replace" data-options="iconCls:'iconfont tr-icon-replace'" system-tip-lang="toolbar.tip['tracker-replace']" onclick="system.plugin.exec('replace-tracker');"><span system-lang="toolbar['tracker-replace']"></span></div>
<div id="menu-plugin-auto-match-data-folder" data-options="iconCls:'iconfont tr-icon-auto-match'" system-tip-lang="menus.plugin['auto-match-data-folder']" onclick="system.plugin.exec('auto-match-data-folder');"><span system-lang="menus.plugin['auto-match-data-folder']"></span></div>
</div>
<textarea id="clipboard-source"></textarea>
</body>
</html>

View File

@ -47,6 +47,7 @@ system.defaultLang = {
"ui-computer": "Desktop UI",
"plugin": "Extensions/plugins",
"rename": "Rename",
"copy-path-to-clipboard": "Copy download location to clipboard",
"tip": {
"start": "Start the checked torrents",
"pause": "Pause the checked torrents",
@ -70,7 +71,8 @@ system.defaultLang = {
"ui-mobile": "Mobile UI",
"ui-original": "Original UI",
"more-peers": "Ask tracker for more peers",
"rename": "Renaming a Torrent's Path"
"rename": "Renaming a Torrent's Path",
"copy-path-to-clipboard": "Copy download location to clipboard"
}
},
"menus": {

View File

@ -47,6 +47,7 @@ system.lang = {
"ui-computer": "桌面UI",
"plugin": "扩展功能/插件",
"rename": "改名",
"copy-path-to-clipboard": "复制保存目录到剪切板",
"tip": {
"start": "重新开始已经选中的种子",
"pause": "暂停已经选中的种子",
@ -70,7 +71,8 @@ system.lang = {
"ui-mobile": "切换到移动设备界面",
"ui-original": "切换到原版界面",
"more-peers": "获取更多Peer",
"rename": "修改种子文件或目录名称"
"rename": "修改种子文件或目录名称",
"copy-path-to-clipboard": "复制保存目录到剪切板",
}
},
"menus": {

File diff suppressed because one or more lines are too long

View File

@ -1,93 +1,96 @@
var system={version:"1.5.0 beta",rootPath:"tr-web-control/",codeupdate:"20180312",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5E3,pageSize:30,pagination:true,pageList:[10,20,30,40,50,100,150,200,250,300],defaultSelectNode:null,autoExpandAttribute:false,defaultLang:"",foldersShow:false,theme:"default",showBTServers:false,ui:{tree:{status:{}}}},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://raw.githubusercontent.com/ronggang/transmission-web-control/dev/release/update.json",
var system={version:"1.5.0 beta",rootPath:"tr-web-control/",codeupdate:"20180312",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5E3,pageSize:30,pagination:true,pageList:[10,20,30,40,50,100,150,200,250,300],defaultSelectNode:null,autoExpandAttribute:false,defaultLang:"",foldersShow:false,theme:"default",showBTServers:false,ui:{status:{tree:{},layout:{main:{},body:{},left:{}},panel:{}}}},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://raw.githubusercontent.com/ronggang/transmission-web-control/dev/release/update.json",
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:{},checkedRows:[],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();this.initThemes()},resetLangText:function(a){a||(a=$);var b=a.find("*[system-lang]");
$.each(b,function(c,e){var d=$(e).attr("system-lang");d.substr(0,1)=="["?$(e).html(eval("system.lang"+d)):$(e).html(eval("system.lang."+d))});b=a.find("*[system-tip-lang]");$.each(b,function(c,e){var d=$(e).attr("system-tip-lang");d.substr(0,1)=="["?$(e).attr("title",eval("system.lang"+d)):$(e).attr("title",eval("system.lang."+d))})},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 e=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);">'+e+"</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();switch(c){case "folders":system.config.foldersShow?
$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}}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){e=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);">'+
e+"</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(d,f){$("<option/>").text(f).val(d).attr("selected",d==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"]);$("#button-cancel-checked").on("click",function(){system.control.torrentlist.datagrid("uncheckAll")})},navToolbarClick:function(a){var b=a.id,c=$(a).data("status"),e=null;switch(b){case "tree-toolbar-nav-folders":e=this.panel.left.tree("find","folders");this.config.foldersShow=c==1?false:true;break;case "tree-toolbar-nav-statistics":e=this.panel.left.tree("find","statistics");break;case "torrent-head-buttons-autoExpandAttribute":e=
{};e.target=null;this.config.autoExpandAttribute=c==1?false:true}if(e){if(c==1){$(a).linkbutton({iconCls:"icon-disabled"});$(e.target).parent().hide();c=0}else{$(a).linkbutton({iconCls:"icon-enabled"});$(e.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 e=a[c];e.name.split(".").pop().toLowerCase()=="torrent"&&b.push(e)}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:"iconfont tr-icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"iconfont tr-icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"iconfont tr-icon-pause2"},{id:"sending",text:this.lang.tree.sending,iconCls:"iconfont tr-icon-upload"},{id:"check",text:this.lang.tree.check,
iconCls:"iconfont tr-icon-data-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"iconfont tr-icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"iconfont tr-icon-errors"},{id:"warning",text:this.lang.tree.warning,iconCls:"iconfont tr-icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,iconCls:"iconfont tr-icon-folder",
children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"iconfont tr-icon-shuju",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,iconCls:"iconfont tr-icon-folder",children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},
{id:"filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]},{id:"current-stats",text:this.lang.tree.statistics.current,iconCls:"iconfont tr-icon-folder",children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},
{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]}]}],onSelect:function(c){system.loadTorrentToList({node:c})},lines:true,onExpand:function(c){system.config.ui.tree.status[c.id]=
c.state;system.saveConfig()},onCollapse:function(c){system.config.ui.tree.status[c.id]=c.state;system.saveConfig()}});for(var a in this.lang.tree.toolbar.nav){var b=this.panel.left.tree("find",a);switch(a){case "folders":if(system.config.foldersShow){$("#tree-toolbar-nav-"+a).click();$(b.target).parent().show()}else $(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(i){if(i.iconCls=="icon-ok"){system.control.torrentlist.datagrid("hideColumn",i.name);b.menu("setIcon",{target:i.target,iconCls:"icon-empty"})}else{system.control.torrentlist.datagrid("showColumn",i.name);b.menu("setIcon",{target:i.target,iconCls:"icon-ok"})}system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig()}});for(var d=system.control.torrentlist.datagrid("getColumnFields"),
f=0;f<d.length;f++){var g=d[f],h=system.control.torrentlist.datagrid("getColumnOption",g);if(h.allowCustom!=false&&h.allowCustom!="false")b.menu("appendItem",{text:h.title,name:g,iconCls:h.hidden?"icon-empty":"icon-ok"})}}this.control.torrentlist=$("<table/>").attr("class","torrent-list").appendTo(this.panel.list);var b=null,c=-1,e=false;$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(d){d=d.fields;if(system.userConfig.torrentList.fields.length!=0)d=$.extend(d,system.userConfig.torrentList.fields);
var f=JSON.stringify(d);system.userConfig.torrentList.fields=JSON.parse(f);for(var g in d){d[g].title=system.lang.torrent.fields[d[g].field]||d[g].field;system.setFieldFormat(d[g])}system.control.torrentlist.datagrid({autoRowHeight:false,pagination:system.config.pagination,rownumbers:true,remoteSort:false,checkOnSelect:false,pageSize:system.config.pageSize,pageList:system.config.pageList,idField:"id",fit:true,striped:true,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,
drophead:true,columns:[d],onCheck:function(h,i){system.checkTorrentRow(h,i)},onUncheck:function(h,i){system.checkTorrentRow(h,i)},onCheckAll:function(){system.checkTorrentRow("all",false)},onUncheckAll:function(){system.checkTorrentRow("all",true)},onSelect:function(h,i){if(c!=-1){e=true;system.control.torrentlist.datagrid("unselectRow",c);e=false}system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south");system.getTorrentInfos(i.id);
c=h},onUnselect:function(){if(system.config.autoExpandAttribute)if(e==false)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(h,i){var k=h;if(h=="remainingTime")k="remainingTimeRaw";k=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(k,i));system.control.torrentlist.datagrid("loadData",k);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);
system.userConfig.torrentList.sortName=h;system.userConfig.torrentList.sortOrder=i;system.saveUserConfig()},onRowContextMenu:function(h,i){system.checkedRows.length==0&&system.control.torrentlist.datagrid("checkRow",i);h.preventDefault();system.showContextMenu("torrent-list",h)},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(h){h.preventDefault();b||a();b.menu("show",{left:h.pageX,top:h.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(a){var b={};$.each(this.userConfig.torrentList.fields,function(c,e){b[e.field]=e});this.userConfig.torrentList.fields=[];$.each(a,function(c,e){var d=$.extend({},b[e.field]);d.width=e.width;d.hidden=e.hidden;system.userConfig.torrentList.fields.push(d)})},showContextMenu:function(a,b){var c=this.contextMenus[a];if(c)c.empty();
else{c=$("<div/>").attr("class","easyui-menu").css({"min-width":"180px"}).appendTo(this.panel.main);this.contextMenus[a]=c;c.menu()}var e=null;switch(a){case "torrent-list":e=["start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom"];var d=this.panel.toolbar,f;for(f in e){var g=e[f];if(g=="-")$("<div class='menu-sep'></div>").appendTo(c);else{var h=d.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-queue-move","iconfont tr-icon"),disabled:d.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})}h=null}}}c.menu("show",
{left:b.pageX,top:b.pageY});e=c=null},checkTorrentRow:function(a,b){this.checkedRows=this.control.torrentlist.datagrid("getChecked");this.showCheckedInStatus();if(a=="all"){if(this.control.torrentlist.datagrid("getRows").length!=0){$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:b});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}}else if(this.checkedRows.length==
0){$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}else if(this.checkedRows.length==1){$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir",this.panel.toolbar).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, #toolbar_recheck").linkbutton({disabled:false});
this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:true});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start, #toolbar_pause, #toolbar_recheck, #toolbar_morepeers").linkbutton({disabled:true});break;default:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:false})}}else{$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir",
this.panel.toolbar).linkbutton({disabled:false});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}},showCheckedInStatus:function(){if(this.checkedRows.length>0){this.panel.status_text.empty();this.showStatus(undefined,0);var a=[],b=this.lang.system.status.checked.replace("%n",this.checkedRows.length);$("<div style='padding: 5px;'/>").html(b).appendTo(this.panel.status_text);for(b=0;b<this.checkedRows.length;b++)a.push({value:b,
text:b+1+". "+this.checkedRows[b].name});$("<div/>").appendTo(this.panel.status_text).datalist({data:a});$(".datalist>.panel-body",this.panel.status_text).css({border:0});$("#button-cancel-checked").show()}else{$("#button-cancel-checked").hide();this.panel.status_text.empty()}},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:520,height:180,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=="iconfont tr-icon-rocket")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:"iconfont tr-icon-"+
(b?"woniu":"rocket")});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:"iconfont tr-icon-woniu"});
$("#status_alt_speed").show()}else{system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"iconfont tr-icon-rocket"});$("#status_alt_speed").hide()}system.downloadDir=b["download-dir"];transmission.downloadDirs.length==0&&transmission.downloadDirs.push(system.downloadDir);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(e){var d=[],f;for(f in e)d.push(e[f].id);e=transmission.torrents.getErrorIds(d,true);e.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(c)},e):system.resetTorrentInfos(c)},a,b)}},resetTorrentInfos:function(a){var b=this.currentTorrentId,c=this.panel.left.tree("find","servers");if(c){var e=c.state;this.removeTreeNode("servers-loading")}else{this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers"}]);
c=this.panel.left.tree("find","servers")}var d=this.panel.left.tree("find","btservers"),f=d?d.state:"close",g;for(g in transmission.trackers){var h=transmission.trackers[g];if(h.isBT){if(!system.config.showBTServers)continue;if(!d){this.appendTreeNode(c,[{id:"btservers",text:"BT",state:"open",iconCls:"iconfont tr-icon-bt"}]);d=this.panel.left.tree("find","btservers")}}var i=system.panel.left.tree("find",h.nodeid),k=h.name+this.showNodeMoreInfos(h.count,h.size);i?system.updateTreeNodeText(h.nodeid,
k,h.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"):system.appendTreeNode(h.isBT?d:c,[{id:h.nodeid,text:k,iconCls:h.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"}]);a.trackers[h.nodeid]=null}e=="closed"&&this.panel.left.tree("collapse",c.target);system.config.showBTServers&&d&&f=="closed"&&this.panel.left.tree("collapse",d.target);for(g in a.trackers)(h=a.trackers[g])&&system.removeTreeNode(h.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]){i=
system.panel.left.tree("find","sending");c=system.panel.left.tree("getChildren",i.target);k=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);c.length>0?system.updateTreeNodeText(c[0].id,k):system.appendTreeNode(i,[{id:"seedwait",text:k,iconCls:"iconfont tr-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]){i=system.panel.left.tree("find","check");c=system.panel.left.tree("getChildren",i.target);k=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);c.length>0?system.updateTreeNodeText(c[0].id,k):system.appendTreeNode(i,[{id:"checkwait",text:k,iconCls:"iconfont tr-icon-wait"}])}else system.removeTreeNode("checkwait");transmission.torrents.status[transmission._status.download]?
{main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left").hide(),body:$("#m_body"),layout_body:$("#layout_body"),layout_left:$("#layout_left"),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();this.initThemes();this.clipboard=new ClipboardJS("#toolbar_copyPath")},
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)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);">'+this.lang.tree.toolbar.nav[c]+"</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();
switch(c){case "folders":system.config.foldersShow?$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}}else this.panel.left_layout.panel("setTitle",b);b="<span>"+this.lang.title.list+"</span>";a.length=0;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(d,e){$("<option/>").text(e).val(d).attr("selected",d==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"]);$("#button-cancel-checked").on("click",function(){system.control.torrentlist.datagrid("uncheckAll")});this.panel.left.tree({onExpand:function(a){system.config.ui.status.tree[a.id]=
a.state;system.saveConfig()},onCollapse:function(a){system.config.ui.status.tree[a.id]=a.state;system.saveConfig()}});this.panel.layout_body.layout({onExpand:function(a){system.config.ui.status.layout.body[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.body[a]="closed";system.saveConfig()}});this.panel.layout_left.layout({onExpand:function(a){system.config.ui.status.layout.left[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.left[a]=
"closed";system.saveConfig()}});this.panel.main.layout({onExpand:function(a){system.config.ui.status.layout.main[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.main[a]="closed";system.saveConfig()}})},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");this.config.foldersShow=c==1?false:true;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:"iconfont tr-icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"iconfont tr-icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"iconfont tr-icon-pause2"},
{id:"sending",text:this.lang.tree.sending,iconCls:"iconfont tr-icon-upload"},{id:"check",text:this.lang.tree.check,iconCls:"iconfont tr-icon-data-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"iconfont tr-icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"iconfont tr-icon-errors"},{id:"warning",text:this.lang.tree.warning,iconCls:"iconfont tr-icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers",children:[{id:"servers-loading",
text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,iconCls:"iconfont tr-icon-folder",state:"closed",children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"iconfont tr-icon-shuju",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,iconCls:"iconfont tr-icon-folder",children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,
iconCls:"iconfont tr-icon-empty"},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]},{id:"current-stats",text:this.lang.tree.statistics.current,iconCls:"iconfont tr-icon-folder",
children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive,
iconCls:"iconfont tr-icon-empty"}]}]}],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);switch(a){case "folders":if(system.config.foldersShow){$("#tree-toolbar-nav-"+a).click();$(b.target).parent().show()}else $(b.target).parent().hide()}}if(this.config.defaultSelectNode)(a=this.panel.left.tree("find",this.config.defaultSelectNode))&&this.panel.left.tree("select",a.target)},initUIStatus:function(){var a=
this.config.ui.status.tree,b;for(b in a){var c=this.panel.left.tree("find",b);if(c&&c.target)a[b]=="open"?this.panel.left.tree("expand",c.target):this.panel.left.tree("collapse",c.target)}this.panel.left.show();a=this.config.ui.status.layout.body;for(b in a)a[b]=="open"?this.panel.layout_body.layout("expand",b):this.panel.layout_body.layout("collapse",b);a=this.config.ui.status.layout.left;for(b in a)a[b]=="open"?this.panel.layout_left.layout("expand",b):this.panel.layout_left.layout("collapse",b);
a=this.config.ui.status.layout.main;for(b in a)a[b]=="open"?this.panel.main.layout("expand",b):this.panel.main.layout("collapse",b)},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 g=d[e],f=system.control.torrentlist.datagrid("getColumnOption",g);if(f.allowCustom!=false&&f.allowCustom!="false")b.menu("appendItem",{text:f.title,name:g,iconCls:f.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=$.extend(d,system.userConfig.torrentList.fields);var e=JSON.stringify(d);system.userConfig.torrentList.fields=JSON.parse(e);for(var g in d){d[g].title=system.lang.torrent.fields[d[g].field]||d[g].field;system.setFieldFormat(d[g])}system.control.torrentlist.datagrid({autoRowHeight:false,pagination:system.config.pagination,rownumbers:true,remoteSort:false,checkOnSelect:false,pageSize:system.config.pageSize,pageList:system.config.pageList,
idField:"id",fit:true,striped:true,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:true,columns:[d],onCheck:function(f,h){system.checkTorrentRow(f,h)},onUncheck:function(f,h){system.checkTorrentRow(f,h)},onCheckAll:function(){system.checkTorrentRow("all",false)},onUncheckAll:function(){system.checkTorrentRow("all",true)},onSelect:function(f,h){c!=-1&&system.control.torrentlist.datagrid("unselectRow",c);system.getTorrentInfos(h.id);c=f},onUnselect:function(){system.currentTorrentId=
0;c=-1},onBeforeLoad:function(){system.currentTorrentId=0},onSortColumn:function(f,h){var i=f;if(f=="remainingTime")i="remainingTimeRaw";i=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(i,h));system.control.torrentlist.datagrid("loadData",i);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=f;system.userConfig.torrentList.sortOrder=h;system.saveUserConfig()},onRowContextMenu:function(f,
h){system.checkedRows.length==0&&system.control.torrentlist.datagrid("checkRow",h);f.preventDefault();system.showContextMenu("torrent-list",f)},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(f){f.preventDefault();b||a();b.menu("show",
{left:f.pageX,top:f.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({"min-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","copyPath","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom"];var e=this.panel.toolbar,g;for(g in d){var f=d[g];if(f=="-")$("<div class='menu-sep'></div>").appendTo(c);else{var h=e.find("#toolbar_"+f);if(h.length>0)c.menu("appendItem",{text:h.attr("title"),id:f,iconCls:h.linkbutton("options").iconCls,
disabled:h.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}});else{h=$("#"+f);h.length>0&&c.menu("appendItem",{text:h.attr("title"),id:f,iconCls:h.attr("id").replace("menu-queue-move","iconfont tr-icon"),disabled:e.find("#toolbar_queue").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){this.checkedRows=
this.control.torrentlist.datagrid("getChecked");this.showCheckedInStatus();if(a=="all"){if(this.control.torrentlist.datagrid("getRows").length!=0){$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:b});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}}else if(this.checkedRows.length==
0){$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}else if(this.checkedRows.length==1){$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir,#toolbar_copyPath",this.panel.toolbar).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, #toolbar_recheck").linkbutton({disabled:false});
this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:true});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start, #toolbar_pause, #toolbar_recheck, #toolbar_morepeers").linkbutton({disabled:true});break;default:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:false})}}else{$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_copyPath",
this.panel.toolbar).linkbutton({disabled:false});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}},showCheckedInStatus:function(){if(this.checkedRows.length>0){this.panel.status_text.empty();this.showStatus(undefined,0);var a=[],b=this.lang.system.status.checked.replace("%n",this.checkedRows.length),c=[];$("<div style='padding: 5px;'/>").html(b).appendTo(this.panel.status_text);for(b=0;b<this.checkedRows.length;b++){var d=
this.checkedRows[b];a.push({value:b,text:b+1+". "+d.name});$.inArray(d.downloadDir,c)===-1&&c.push(d.downloadDir)}$("<div/>").appendTo(this.panel.status_text).datalist({data:a});$(".datalist>.panel-body",this.panel.status_text).css({border:0});$("#button-cancel-checked").show();$("#clipboard-source").val(c.join("\n"))}else{$("#button-cancel-checked").hide();this.panel.status_text.empty();$("#clipboard-source").val("")}},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:520,height:180,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==
"iconfont tr-icon-rocket")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:"iconfont tr-icon-"+(b?"woniu":"rocket")});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"]});this.panel.toolbar.find("#toolbar_copyPath").linkbutton().attr("title",this.lang.toolbar.tip["copy-path-to-clipboard"])},
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();setTimeout(function(){system.initUIStatus()},
300)})},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:"iconfont tr-icon-woniu"});$("#status_alt_speed").show()}else{system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"iconfont tr-icon-rocket"});
$("#status_alt_speed").hide()}system.downloadDir=b["download-dir"];transmission.downloadDirs.length==0&&transmission.downloadDirs.push(system.downloadDir);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=[],g;for(g in d)e.push(d[g].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){var d=c.state;this.removeTreeNode("servers-loading")}else{this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers"}]);c=this.panel.left.tree("find","servers")}var e=this.panel.left.tree("find","btservers"),g=e?e.state:
"close",f;for(f in transmission.trackers){var h=transmission.trackers[f];if(h.isBT){if(!system.config.showBTServers)continue;if(!e){this.appendTreeNode(c,[{id:"btservers",text:"BT",state:"open",iconCls:"iconfont tr-icon-bt"}]);e=this.panel.left.tree("find","btservers")}}var i=system.panel.left.tree("find",h.nodeid),k=h.name+this.showNodeMoreInfos(h.count,h.size);i?system.updateTreeNodeText(h.nodeid,k,h.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"):system.appendTreeNode(h.isBT?
e:c,[{id:h.nodeid,text:k,iconCls:h.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"}]);a.trackers[h.nodeid]=null}d=="closed"&&this.panel.left.tree("collapse",c.target);system.config.showBTServers&&e&&g=="closed"&&this.panel.left.tree("collapse",e.target);for(f in a.trackers)(h=a.trackers[f])&&system.removeTreeNode(h.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]){i=system.panel.left.tree("find","sending");c=system.panel.left.tree("getChildren",i.target);k=system.lang.tree.wait+
this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);c.length>0?system.updateTreeNodeText(c[0].id,k):system.appendTreeNode(i,[{id:"seedwait",text:k,iconCls:"iconfont tr-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]){i=system.panel.left.tree("find","check");c=system.panel.left.tree("getChildren",i.target);k=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);c.length>0?system.updateTreeNodeText(c[0].id,k):system.appendTreeNode(i,[{id:"checkwait",text:k,iconCls:"iconfont tr-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]){i=system.panel.left.tree("find","downloading");c=system.panel.left.tree("getChildren",i.target);k=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);
c.length>0?system.updateTreeNodeText(c[0].id,k):system.appendTreeNode(i,[{id:"downloadwait",text:k,iconCls:"iconfont tr-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));
i=system.panel.left.tree("getSelected");if(i!=null){k=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:i,page:k})}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(l,j){switch(j){case "uploadedBytes":case "downloadedBytes":system.updateTreeNodeText(j,system.lang.tree.statistics[j]+formatSize(system.serverSessionStats["cumulative-stats"][j]));system.updateTreeNodeText("current-"+j,system.lang.tree.statistics[j]+formatSize(system.serverSessionStats["current-stats"][j]));break;case "secondsActive":system.updateTreeNodeText(j,system.lang.tree.statistics[j]+getTotalTime(system.serverSessionStats["cumulative-stats"][j]*
1E3));system.updateTreeNodeText("current-"+j,system.lang.tree.statistics[j]+getTotalTime(system.serverSessionStats["current-stats"][j]*1E3));break;default:system.updateTreeNodeText(j,system.lang.tree.statistics[j]+system.serverSessionStats["cumulative-stats"][j]);system.updateTreeNodeText("current-"+j,system.lang.tree.statistics[j]+system.serverSessionStats["current-stats"][j])}});for(g in transmission.torrents.folders)a.folders[transmission.torrents.folders[g].nodeid]=null;this.loadFolderList(a.folders);
1E3));system.updateTreeNodeText("current-"+j,system.lang.tree.statistics[j]+getTotalTime(system.serverSessionStats["current-stats"][j]*1E3));break;default:system.updateTreeNodeText(j,system.lang.tree.statistics[j]+system.serverSessionStats["cumulative-stats"][j]);system.updateTreeNodeText("current-"+j,system.lang.tree.statistics[j]+system.serverSessionStats["current-stats"][j])}});for(f in transmission.torrents.folders)a.folders[transmission.torrents.folders[f].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();a&&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:""},e=this.panel.left.data("currentNodeId");if(e!=a.node.id){this.control.torrentlist.datagrid("uncheckAll");this.control.torrentlist.datagrid({pageNumber:1});e=a.node.id}this.panel.left.data("currentNodeId",e);switch(c.id){case "servers":case "btservers":b=a.node.id=="btservers"?transmission.torrents.btItems:transmission.trackers[a.node.id].torrents;
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("uncheckAll");this.control.torrentlist.datagrid({pageNumber:1});d=a.node.id}this.panel.left.data("currentNodeId",d);switch(c.id){case "servers":case "btservers":b=a.node.id=="btservers"?transmission.torrents.btItems: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;case "btservers":b=transmission.torrents.btItems;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 d in b){if(!b[d])return;c=this.lang.torrent["status-text"][b[d].status];parseFloat(b[d].percentDone*100).toFixed(2);c==transmission._status.check&&parseFloat(b[d].recheckProgress*100).toFixed(2);if(b[d].error!=0)c="<span class='text-status-error'>"+c+"</span>";else if(b[d].warning)c=
"<span class='text-status-warning' title='"+b[d].warning+"'>"+c+"</span>";e={};e=$.extend(e,b[d]);e.status=c;e.statusCode=b[d].status;e.completeSize=Math.max(0,b[d].totalSize-b[d].leftUntilDone);e.leecherCount=b[d].leecher;e.seederCount=b[d].seeder;a.push(e)}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"),
e=null;if(c.sortName){var d=e=c.sortName;if(e=="remainingTime")d="remainingTimeRaw";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:e,sortOrder:c.sortOrder}).datagrid("loadData",a);else{this.control.torrentlist.datagrid("getData").originalRows=a;e=(c.pageNumber-1)*parseInt(c.pageSize);c=e+parseInt(c.pageSize);a=a.slice(e,
c);c={};e={};for(var f in transmission.torrents.recently){d=transmission.torrents.recently[f];c[d.id]=true}for(f in a){d=a[f];e[d.id]=d}var g={};for(f=b.length-1;f>=0;f--){d=b[f];var h=e[d.id];if(h)if(c[d.id]){this.control.torrentlist.datagrid("updateRow",{index:f,row:h});g[d.id]=d}else if(transmission.torrents.removed)if(transmission.torrents.removed.length>0&&$.inArray(d.id,transmission.torrents.removed)!=-1)this.control.torrentlist.datagrid("deleteRow",f);else g[d.id]=d;else g[d.id]=d;else this.control.torrentlist.datagrid("deleteRow",
f)}for(f in a){d=a[f];g[d.id]||this.control.torrentlist.datagrid("appendRow",d)}}}},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="",e=0;e=typeof b=="object"?b.status:b;switch(e){case transmission._status.stopped:c="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:c=
-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=Math.max(0,b[e].totalSize-b[e].leftUntilDone);d.leecherCount=b[e].leecher;d.seederCount=b[e].seeder;a.push(d)}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){var e=d=c.sortName;if(d=="remainingTime")e="remainingTimeRaw";a=a.sort(arrayObjectSort(e,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 g in transmission.torrents.recently){e=transmission.torrents.recently[g];c[e.id]=true}for(g in a){e=a[g];d[e.id]=e}var f={};for(g=b.length-1;g>=0;g--){e=b[g];var h=d[e.id];if(h)if(c[e.id]){this.control.torrentlist.datagrid("updateRow",{index:g,row:h});f[e.id]=e}else if(transmission.torrents.removed)if(transmission.torrents.removed.length>0&&$.inArray(e.id,transmission.torrents.removed)!=-1)this.control.torrentlist.datagrid("deleteRow",g);else f[e.id]=e;else f[e.id]=e;else this.control.torrentlist.datagrid("deleteRow",
g)}for(g in a){e=a[g];f[e.id]||this.control.torrentlist.datagrid("appendRow",e)}}}},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,e){var d=b-a.length,f=a.shift();if(f){this.showStatus(this.lang.system.status.queue+(d+1)+"/"+b+"<br/>"+f,0);transmission.addTorrentFromUrl(f,e,c,function(){system.addTorrentsToServer(a,b,c,e)})}else{this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus()}},changeSelectedTorrentStatus:function(a,b,c){var e=this.control.torrentlist.datagrid("getChecked"),d=[];a||(a="start");for(var f in e)d.push(e[f].id);c||(c="torrent-"+a);if(d.length>0){if(b){var g=
b.linkbutton("options").iconCls;b.linkbutton({disabled:true,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:d}},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+
addTorrentsToServer:function(a,b,c,d){var e=b-a.length,g=a.shift();if(g){this.showStatus(this.lang.system.status.queue+(e+1)+"/"+b+"<br/>"+g,0);transmission.addTorrentFromUrl(g,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 g in d)e.push(d[g].id);c||(c="torrent-"+a);if(e.length>0){if(b){var f=
b.linkbutton("options").iconCls;b.linkbutton({disabled:true,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:e}},function(){b&&b.linkbutton({iconCls:f});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:"iconfont tr-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(e){b.infoIsLoading=false;if(e!=null){jQuery.extend(b,e[0]);if(system.currentTorrentId==0||system.currentTorrentId!=a)system.clearTorrentAttribute();
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 e=c.datagrid("getRows"),d=c.datagrid("options"),f=null;if(d.sortName){f=d.sortName;b=b.sort(arrayObjectSort(f,d.sortOrder))}if(e.length==0||b.length!=c.datagrid("getData").total&&b.length>d.pageSize)c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:f,sortOrder:d.sortOrder}).datagrid("loadData",b);else{c.datagrid("getData").originalRows=b;f=(d.pageNumber-1)*parseInt(d.pageSize);
d=f+parseInt(d.pageSize);b=b.slice(f,d);d={};for(var g in b){f=b[g];d[f[a]]=f}for(g=e.length-1;g>=0;g--){f=e[g];(b=d[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,e=[],d=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);e.push({name:g.name==
a.name?g.name:g.name.substr(d),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",e,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(a){var b=a.trackerStats,c=[],e;for(e in b){var d=
b[e],f={},g;for(g in d)switch(g){case "lastAnnounceTime":case "nextAnnounceTime":f[g]=formatLongTime(d[g]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":f[g]=system.lang.torrent.attribute.status[d[g]];break;default:f[g]=d[g]}c.push(f)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",c,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){a=a.peers;var b=[],c;for(c in a){var e=a[c],d={},f;for(f in e)d[f]=e[f];e=parseFloat(e.progress*
100).toFixed(2);d.progress=system.getTorrentProgressBar(e,transmission._status.download);b.push(d)}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,e){var d=false,
f=false,g=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(e==0){f=false;d=true}g=true;case "downloadLimited":case "uploadLimited":if(e==true||e==1)f=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!f);g&&system.panel.attribute.find("#"+c).prop("indeterminate",d).data("_tag",e);system.panel.attribute.find("#"+c).prop("checked",f);break;default:system.panel.attribute.find("#"+c).val(e);system.panel.attribute.find("#"+c).numberspinner("setValue",e)}})}})},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 e=parseFloat(b*100).toFixed(2);return system.getTorrentProgressBar(e,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])}}break;case "ratio":a.formatter=
[]);system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(a,b,c){var d=c.datagrid("getRows"),e=c.datagrid("options"),g=null;if(e.sortName){g=e.sortName;b=b.sort(arrayObjectSort(g,e.sortOrder))}if(d.length==0||b.length!=c.datagrid("getData").total&&b.length>e.pageSize)c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:g,sortOrder:e.sortOrder}).datagrid("loadData",b);else{c.datagrid("getData").originalRows=b;g=(e.pageNumber-1)*parseInt(e.pageSize);
e=g+parseInt(e.pageSize);b=b.slice(g,e);e={};for(var f in b){g=b[f];e[g[a]]=g}for(f=d.length-1;f>=0;f--){g=d[f];(b=e[g[a]])?c.datagrid("updateRow",{index:f,row:b}):c.datagrid("deleteRow",f)}}},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,g;for(g in b){var f=b[g],h=c[g],i=parseFloat(h.bytesCompleted/f.length*100).toFixed(2);d.push({name:f.name==
a.name?f.name:f.name.substr(e),index:g,bytesCompleted:h.bytesCompleted,percentDone:system.getTorrentProgressBar(i,transmission._status.download),length:f.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.trackerStats,c=[],d;for(d in b){var e=
b[d],g={},f;for(f in e)switch(f){case "lastAnnounceTime":case "nextAnnounceTime":g[f]=formatLongTime(e[f]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":g[f]=system.lang.torrent.attribute.status[e[f]];break;default:g[f]=e[f]}c.push(g)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",c,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={},g;for(g in d)e[g]=d[g];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,
g=false,f=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(d==0){g=false;e=true}f=true;case "downloadLimited":case "uploadLimited":if(d==true||d==1)g=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!g);f&&system.panel.attribute.find("#"+c).prop("indeterminate",e).data("_tag",d);system.panel.attribute.find("#"+c).prop("checked",g);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])}}break;case "ratio":a.formatter=
function(b){var c="";if(parseFloat(b)<1)c="text-status-warning";return'<span class="'+c+'">'+b+"</span>"}}},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-",e;for(e in a){var d=a[e];if(d!=""){c+=this.B64.encode(d);var f=this.panel.left.tree("find",c),g=transmission.torrents.folders[c];d=d+this.showNodeMoreInfos(g.count,g.size);if(f)this.updateTreeNodeText(c,d);else{this.appendTreeNode(b,[{id:c,text:d,iconCls:"iconfont tr-icon-file"}]);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=this.getStorageData(this.configHead+".system");if(a)this.config=$.extend(this.config,JSON.parse(a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){this.setStorageData(this.configHead+".system",
JSON.stringify(this.config));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,e){if(window.FileReader){var d=$("input[id='"+a+"']")[0].files;$.each(d,
function(f,g){transmission.addTorrentFromFile(g,b,c,e,d.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(a){if(a&&a.update)if(system.codeupdate<a.update){$("#area-update-infos").show();$("#msg-updateInfos").html(a.update+" -> "+a.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,e=a.datas,d=$("#"+b);if(d.length){d.dialog("open");e&&$.each(e,function(f,g){d.data(f,g)});d.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;e&&$.each(e,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)},initThemes:function(){this.themes&&$("#select-themes").combobox({groupField:"group",data:this.themes,editable:false,panelHeight:"auto",onChange:function(a){var b=(a+";").split(";"),
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 g=this.panel.left.tree("find",c),f=transmission.torrents.folders[c];e=e+this.showNodeMoreInfos(f.count,f.size);if(g)this.updateTreeNodeText(c,e);else{this.appendTreeNode(b,[{id:c,text:e,iconCls:"iconfont tr-icon-file"}]);if(b!="folders"){g=this.panel.left.tree("find",b);this.panel.left.tree("collapse",
g.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=this.getStorageData(this.configHead+".system");if(a)this.config=$.extend(true,this.config,JSON.parse(a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){this.setStorageData(this.configHead+".system",
JSON.stringify(this.config));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(g,f){transmission.addTorrentFromFile(f,b,c,d,e.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(a){if(a&&a.update)if(system.codeupdate<a.update){$("#area-update-infos").show();$("#msg-updateInfos").html(a.update+" -> "+a.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(g,f){e.data(g,f)});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(g){system.templates[b]=g;d&&$.each(d,function(f,h){$("#"+b).data(f,h)});$("#"+b).dialog({content:g})})}}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)},initThemes:function(){this.themes&&$("#select-themes").combobox({groupField:"group",data:this.themes,editable:false,panelHeight:"auto",onChange:function(a){var b=(a+";").split(";"),
c=b[0];b=b[1]||"logo.png";$("#styleEasyui").attr("href","tr-web-control/script/easyui/themes/"+c+"/easyui.css");$("#logo").attr("src","tr-web-control/"+b);system.config.theme=a;system.saveConfig()},onLoadSuccess:function(){$(this).combobox("setValue",system.config.theme||"default")}})}};$(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"),e=b.datagrid("getPager"),d=b.data("buttons");e.pagination({onSelectPage:function(g,h){c.pageNumber=g;c.pageSize=h;e.pagination("refresh",{pageNumber:g,pageSize:h});b.datagrid("loadData",a)},buttons:d});if(!a.originalRows)a.originalRows=a.rows;d=(c.pageNumber-1)*parseInt(c.pageSize);var f=d+parseInt(c.pageSize);a.rows=a.originalRows.slice(d,f);return a};
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(f,h){c.pageNumber=f;c.pageSize=h;d.pagination("refresh",{pageNumber:f,pageSize:h});b.datagrid("loadData",a)},buttons:e});if(!a.originalRows)a.originalRows=a.rows;e=(c.pageNumber-1)*parseInt(c.pageSize);var g=e+parseInt(c.pageSize);a.rows=a.originalRows.slice(e,g);return a};

View File

@ -20,8 +20,14 @@ var system = {
// 是否显示BT服务器
showBTServers: false,
ui: {
tree: {
status: {}
status: {
tree: {},
layout: {
main: {},
body: {},
left: {}
},
panel: {}
}
}
},
@ -125,9 +131,10 @@ var system = {
top: $("#m_top"),
toolbar: $("#m_toolbar"),
left_layout: $("#m_left_layout"),
left: $("#m_left"),
left: $("#m_left").hide(),
body: $("#m_body"),
layout_body: $("#layout_body"),
layout_left: $("#layout_left"),
list: $("#m_list"),
attribute: $("#m_attribute"),
bottom: $("#m_bottom"),
@ -147,6 +154,9 @@ var system = {
}
this.initThemes();
// 剪切板组件
this.clipboard = new ClipboardJS('#toolbar_copyPath');
},
// Set the language information
resetLangText: function (parent) {
@ -216,12 +226,12 @@ var system = {
// Initialize the torrent list column title
title = "<span>" + this.lang.title.list + "</span>";
buttons.length = 0;
buttons.push("<span class='tree-title-toolbar'>");
for (var key in this.lang["torrent-head"].buttons) {
var value = this.lang["torrent-head"].buttons[key];
buttons.push('<a href="javascript:void(0);" id="torrent-head-buttons-' + key + '" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">' + value + "</a>");
}
buttons.push("</span>");
// buttons.push("<span class='tree-title-toolbar'>");
// for (var key in this.lang["torrent-head"].buttons) {
// var value = this.lang["torrent-head"].buttons[key];
// buttons.push('<a href="javascript:void(0);" id="torrent-head-buttons-' + key + '" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">' + value + "</a>");
// }
// buttons.push("</span>");
if (buttons.length > 1) {
title += buttons.join("");
this.panel.body.panel("setTitle", title);
@ -250,6 +260,7 @@ var system = {
}
this.panel.status.panel("setTitle", this.lang.title.status);
// 设置属性栏
this.panel.attribute.panel({
title: this.lang.title.attribute,
onExpand: function () {
@ -335,6 +346,51 @@ var system = {
system.control.torrentlist.datagrid("uncheckAll");
});
// 树型目录事件
this.panel.left.tree({
onExpand: function(node) {
system.config.ui.status.tree[node.id] = node.state;
system.saveConfig();
},
onCollapse: function(node) {
system.config.ui.status.tree[node.id] = node.state;
system.saveConfig();
}
});
// 设置属性栏
this.panel.layout_body.layout({
onExpand: function (region) {
system.config.ui.status.layout.body[region] = "open";
system.saveConfig();
},
onCollapse: function(region) {
system.config.ui.status.layout.body[region] = "closed";
system.saveConfig();
}
});
this.panel.layout_left.layout({
onExpand: function (region) {
system.config.ui.status.layout.left[region] = "open";
system.saveConfig();
},
onCollapse: function(region) {
system.config.ui.status.layout.left[region] = "closed";
system.saveConfig();
}
});
this.panel.main.layout({
onExpand: function (region) {
system.config.ui.status.layout.main[region] = "open";
system.saveConfig();
},
onCollapse: function(region) {
system.config.ui.status.layout.main[region] = "closed";
system.saveConfig();
}
});
},
// Navigation toolbar Click Events
navToolbarClick: function (source) {
@ -464,6 +520,7 @@ var system = {
id: "folders",
text: this.lang.tree.folders,
iconCls: "iconfont tr-icon-folder",
state: "closed",
children: [{
id: "folders-loading",
text: this.lang.tree.status.loading,
@ -533,15 +590,7 @@ var system = {
node: node
});
},
lines: true,
onExpand: function(node) {
system.config.ui.tree.status[node.id] = node.state;
system.saveConfig();
},
onCollapse: function(node) {
system.config.ui.tree.status[node.id] = node.state;
system.saveConfig();
}
lines: true
});
for (var key in this.lang.tree.toolbar.nav) {
@ -565,6 +614,51 @@ var system = {
}
}
},
/**
* 初始化界面状态
*/
initUIStatus: function() {
var status = this.config.ui.status.tree;
for (var key in status) {
var node = this.panel.left.tree("find", key);
if (node && node.target) {
if (status[key]=="open") {
this.panel.left.tree("expand", node.target);
} else {
this.panel.left.tree("collapse", node.target);
}
}
}
this.panel.left.show();
status = this.config.ui.status.layout.body;
for (var key in status) {
if (status[key]=="open") {
this.panel.layout_body.layout("expand", key);
} else {
this.panel.layout_body.layout("collapse", key);
}
}
status = this.config.ui.status.layout.left;
for (var key in status) {
if (status[key]=="open") {
this.panel.layout_left.layout("expand", key);
} else {
this.panel.layout_left.layout("collapse", key);
}
}
status = this.config.ui.status.layout.main;
for (var key in status) {
if (status[key]=="open") {
this.panel.main.layout("expand", key);
} else {
this.panel.main.layout("collapse", key);
}
}
},
// Initialize the torrent list display table
initTorrentTable: function () {
this.control.torrentlist = $("<table/>").attr("class", "torrent-list").appendTo(this.panel.list);
@ -620,22 +714,22 @@ var system = {
flag_onselect = false;
}
if (system.config.autoExpandAttribute) {
// If it is not expanded, expand it
if (system.panel.attribute.panel("options").collapsed)
system.panel.layout_body.layout("expand", "south");
}
// if (system.config.autoExpandAttribute) {
// // If it is not expanded, expand it
// if (system.panel.attribute.panel("options").collapsed)
// system.panel.layout_body.layout("expand", "south");
// }
system.getTorrentInfos(rowData.id);
selectedIndex = rowIndex;
},
onUnselect: function (rowIndex, rowData) {
if (system.config.autoExpandAttribute) {
if (flag_onselect == false) {
// If expanded, collapse it
if (!system.panel.attribute.panel("options").collapsed)
system.panel.layout_body.layout("collapse", "south");
}
}
// if (system.config.autoExpandAttribute) {
// if (flag_onselect == false) {
// // If expanded, collapse it
// if (!system.panel.attribute.panel("options").collapsed)
// system.panel.layout_body.layout("collapse", "south");
// }
// }
system.currentTorrentId = 0;
selectedIndex = -1;
},
@ -767,7 +861,7 @@ var system = {
switch (type) {
case "torrent-list":
menus = 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");
menus = new Array("start", "pause", "-", "rename", "remove", "recheck", "-", "morepeers", "changeDownloadDir", "copyPath", "-", "menu-queue-move-top", "menu-queue-move-up", "menu-queue-move-down", "menu-queue-move-bottom");
var toolbar = this.panel.toolbar;
for (var item in menus) {
var key = menus[item];
@ -825,7 +919,7 @@ var system = {
if (this.control.torrentlist.datagrid("getRows").length==0) {
return;
}
$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers", this.panel.toolbar).linkbutton({
$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath", this.panel.toolbar).linkbutton({
disabled: rowData
});
@ -839,7 +933,7 @@ var system = {
// 如果没有被选中的数据时
if (this.checkedRows.length == 0) {
// 禁用所有菜单
$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers", this.panel.toolbar).linkbutton({
$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath", this.panel.toolbar).linkbutton({
disabled: true
});
this.panel.toolbar.find("#toolbar_queue").menubutton("disable");
@ -848,7 +942,7 @@ var system = {
// 当仅有一条数据被选中时
} else if (this.checkedRows.length == 1) {
// 设置 删除、改名、变更保存目录、移动队列功能可用
$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir", this.panel.toolbar).linkbutton({
$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir,#toolbar_copyPath", this.panel.toolbar).linkbutton({
disabled: false
});
this.panel.toolbar.find("#toolbar_queue").menubutton("enable");
@ -887,7 +981,7 @@ var system = {
// 多条数据被选中时
} else {
$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir", this.panel.toolbar).linkbutton({
$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_copyPath", this.panel.toolbar).linkbutton({
disabled: false
});
$("#toolbar_rename, #toolbar_morepeers", this.panel.toolbar).linkbutton({
@ -905,10 +999,14 @@ var system = {
this.showStatus(undefined, 0);
var items = [];
var text = this.lang.system.status.checked.replace("%n", this.checkedRows.length);
var paths = [];
$("<div style='padding: 5px;'/>").html(text).appendTo(this.panel.status_text);
for (var index = 0; index < this.checkedRows.length; index++) {
var item = this.checkedRows[index];
items.push({value: index, text: (index+1)+". "+item.name});
if ($.inArray(item.downloadDir, paths)===-1) {
paths.push(item.downloadDir);
}
}
$("<div/>").appendTo(this.panel.status_text).datalist({
data: items
@ -918,10 +1016,12 @@ var system = {
border: 0
});
$("#button-cancel-checked").show();
$("#clipboard-source").val(paths.join("\n"));
} else {
// this.showStatus("无", 100);
$("#button-cancel-checked").hide();
this.panel.status_text.empty();
$("#clipboard-source").val("");
}
},
// Initialize the System Toolbar
@ -1233,6 +1333,10 @@ var system = {
},
prompt: this.lang.toolbar["search-prompt"]
});
this.panel.toolbar.find("#toolbar_copyPath")
.linkbutton()
.attr("title", this.lang.toolbar.tip["copy-path-to-clipboard"]);
},
// Initialize the status bar
initStatusBar: function () {
@ -1257,6 +1361,9 @@ var system = {
}, function () {
system.reloadSession(true);
system.getServerStatus();
setTimeout(function(){
system.initUIStatus();
}, 300);
});
},
// Reload the server information
@ -2504,7 +2611,7 @@ var system = {
// 将原来的cookies的方式改为本地存储的方式
var config = this.getStorageData(this.configHead + '.system');
if (config) {
this.config = $.extend(this.config, JSON.parse(config));
this.config = $.extend(true, this.config, JSON.parse(config));
}
for (var key in this.storageKeys.dictionary) {