1、修复切换导航后未能清除之前的选择,导致误删除的BUG;Fixed #48 #152

2、种子列表增加列“最近活动时间”;Close #148
3、更换工具栏部分图标,改为 iconfont;
4、重新整理关于页面,增加相关链接;
This commit is contained in:
ronggang 2018-03-08 17:03:16 +08:00
parent 3b109b6ac6
commit e323748f70
10 changed files with 1847 additions and 2001 deletions

View File

@ -14,6 +14,7 @@
<link id="styleEasyui" rel="stylesheet" type="text/css" href="tr-web-control/script/easyui/themes/default/easyui.css?v=20180208"/>
<link rel="stylesheet" type="text/css" href="tr-web-control/script/easyui/themes/icon.css?v=20180208"/>
<link rel="stylesheet" type="text/css" href="tr-web-control/style/icon.custom.css?v=20180208"/>
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_584244_vwnk0ttel0yn9udi.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>
@ -64,47 +65,48 @@
<a id="" href="javascript:location.href = 'index.original.html';" class="easyui-linkbutton" data-options="iconCls:'icon-transmission',plain:true" system-tip-lang="toolbar.tip['ui-original']"><label system-lang="toolbar['ui-original']"></label></a>
<span class="button-split">|</span>
<!-- 关于 -->
<a id="toolbar_about" href="javascript:void(0);" onclick="javascript:system.openDialogFromTemplate({id: 'dialog-about',options: {title: system.lang.toolbar['about'],width: 340,height: 220}});" class="easyui-linkbutton" data-options="iconCls:'icon-about',plain:true" system-tip-lang="toolbar.about"><span system-lang="toolbar.about"></span></a>
<a id="toolbar_about" href="javascript:void(0);" onclick="javascript:system.openDialogFromTemplate({id: 'dialog-about',options: {title: system.lang.toolbar['about'],width: 400,height: 310}});" class="easyui-linkbutton" data-options="iconCls:'icon-about',plain:true" system-tip-lang="toolbar.about"><span system-lang="toolbar.about"></span></a>
</div>
<div style="float:right;display:none;">Language<select id="lang" value="" style="width:200px;"></select></div>
</div>
<!-- 工具栏 -->
<div id="m_toolbar" data-options="region:'south',border:0">
<!-- 增加种子 -->
<a id="toolbar_add_torrents" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true,disabled:true"></a>
<a id="toolbar_add_torrents" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-plus',plain:true,disabled:true"></a>
<span class="button-split">|</span>
<!-- 刷新 -->
<a id="toolbar_reload" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-reload',plain:true"></a>
<!-- 限速 -->
<a id="toolbar_alt_speed" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-alt-speed-false',plain:true"></a>
<span class="button-split">|</span>
<!-- 刷新 -->
<a id="toolbar_reload" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-reload',plain:true"></a>
<!-- 设置 -->
<a id="toolbar_config" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-system-config',plain:true"></a>
<a id="toolbar_config" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-system-config',plain:true"></a>
<span class="button-split">|</span>
<!-- 扩展功能/插件 -->
<a id="toolbar_plugin" href="#" class="easyui-menubutton" data-options="menu:'#menu-plugin',iconCls:'icon-plugin',disabled:false" system-tip-lang="toolbar.plugin"></a>
<a id="toolbar_plugin" href="#" class="easyui-menubutton" data-options="menu:'#menu-plugin',iconCls:'iconfont tr-icon-plugin',disabled:false" system-tip-lang="toolbar.plugin"></a>
<span class="button-split">|</span>
<!-- 开始 -->
<a id="toolbar_start" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-start-one',plain:true,disabled:true"></a>
<a id="toolbar_start" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-start',plain:true,disabled:true"></a>
<!-- 暂停 -->
<a id="toolbar_pause" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-pause-one',plain:true,disabled:true"></a>
<a id="toolbar_pause" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-pause',plain:true,disabled:true"></a>
<!-- 改名 -->
<a id="toolbar_rename" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-rename',plain:true,disabled:true" system-tip-lang="toolbar.tip.rename"></a>
<a id="toolbar_rename" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-rename',plain:true,disabled:true" system-tip-lang="toolbar.tip.rename"></a>
<!-- 删除 -->
<a id="toolbar_remove" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-remove-torrent',plain:true,disabled:true"></a>
<a id="toolbar_remove" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-delete',plain:true,disabled:true"></a>
<!-- 重新校验 -->
<a id="toolbar_recheck" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-recheck-torrent',plain:true,disabled:true"></a>
<a id="toolbar_recheck" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-recheck-torrent',plain:true,disabled:true"></a>
<!-- 获取更多Peers -->
<a id="toolbar_morepeers" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-more-peers',plain:true,disabled:true" system-tip-lang="toolbar.tip['more-peers']"></a>
<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:'icon-folder-change',plain:true,disabled:true"></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>
<span class="button-split">|</span>
<!-- 队列 -->
<a id="toolbar_queue" href="#" class="easyui-menubutton" data-options="menu:'#menu-queue',iconCls:'icon-queue-move',disabled:true" system-tip-lang="toolbar.queue"></a>
<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>
<span class="button-split">|</span>
<!-- 开始所有 -->
<a id="toolbar_start_all" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-start-all',plain:true,disabled:true"></a>
<a id="toolbar_start_all" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-start-all',plain:true,disabled:true"></a>
<!-- 暂停所有 -->
<a id="toolbar_pause_all" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-pause-all',plain:true,disabled:true"></a>
<a id="toolbar_pause_all" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-pause-all',plain:true,disabled:true"></a>
<span class="button-split">|</span>
<label id="toolbar_label_reload_time"></label>
<input id="toolbar_reload_time" style="width:50px;text-align:center;" class="easyui-numberspinner"/>
@ -122,6 +124,7 @@
<div id="m_left" data-options="region:'center',border:0"></div>
<div id="m_status" title="status" data-options="region:'south',split:true,border:0,collapsed:true">
<span id="status_text"></span>
<a id="button-cancel-checked" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-cancel-checked'" style="display:none;right: 5px;bottom: 5px;position:absolute;" system-tip-lang="dialog['public']['button-cancel']"></a>
</div>
</div>
</div>
@ -145,15 +148,15 @@
</div>
<!-- 队列子菜单 -->
<div id="menu-queue" style="width:150px;">
<div id="menu-queue-move-top" data-options="iconCls:'icon-queue-move-top'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-top');" system-tip-lang="menus.queue['move-top']"><span system-lang="menus.queue['move-top']"></span></div>
<div id="menu-queue-move-up" data-options="iconCls:'icon-queue-move-up'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-up');" system-tip-lang="menus.queue['move-up']"><span system-lang="menus.queue['move-up']"></span></div>
<div id="menu-queue-move-down" data-options="iconCls:'icon-queue-move-down'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-down');" system-tip-lang="menus.queue['move-down']"><span system-lang="menus.queue['move-down']"></span></div>
<div id="menu-queue-move-bottom" data-options="iconCls:'icon-queue-move-bottom'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-bottom');" system-tip-lang="menus.queue['move-bottom']"><span system-lang="menus.queue['move-bottom']"></span></div>
<div id="menu-queue-move-top" data-options="iconCls:'iconfont tr-icon-top'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-top');" system-tip-lang="menus.queue['move-top']"><span system-lang="menus.queue['move-top']"></span></div>
<div id="menu-queue-move-up" data-options="iconCls:'iconfont tr-icon-up'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-up');" system-tip-lang="menus.queue['move-up']"><span system-lang="menus.queue['move-up']"></span></div>
<div id="menu-queue-move-down" data-options="iconCls:'iconfont tr-icon-down'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-down');" system-tip-lang="menus.queue['move-down']"><span system-lang="menus.queue['move-down']"></span></div>
<div id="menu-queue-move-bottom" data-options="iconCls:'iconfont tr-icon-bottom'" onclick="system.changeSelectedTorrentStatus('',null,'queue-move-bottom');" system-tip-lang="menus.queue['move-bottom']"><span system-lang="menus.queue['move-bottom']"></span></div>
</div>
<!-- 扩展功能/插件 -->
<div id="menu-plugin" style="width:260px;">
<div id="menu-plugin-tracker-replace" data-options="iconCls:'icon-tracker-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:'icon-target'" 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 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>
</body>
</html>

View File

@ -1,259 +1,262 @@
// lang file
system.defaultLang = {
"name":"en"
,"system":{
"title":"Transmission WEB Control"
,"status":{
"connect":"Connecting..."
,"connected":"Connected"
,"queue":"Queue:"
,"queuefinish":"The queue(s) has finished."
,"notfinal":"Not finalized"
"name": "en",
"system": {
"title": "Transmission WEB Control",
"status": {
"connect": "Connecting...",
"connected": "Connected",
"queue": "Queue:",
"queuefinish": "The queue(s) has finished.",
"notfinal": "Not finalized",
"checked": "%n data checked: "
}
}
,"error":{
"data-error":"Error recieving data!"
,"data-post-error":"Error posting data!"
,"rename-error":"Error renaming file/folder!"
}
,"config":{
"save-path":"Download directory"
}
,"toolbar":{
"start":"Start"
,"pause":"Pause"
,"recheck":"Recheck"
,"start-all":"Start all"
,"pause-all":"Pause all"
,"remove":"Remove"
,"remove-all":"Remove all"
,"remove-data":"Remove data"
,"add-torrent":"Add Torrent"
,"attribute":"Attribute"
,"alt-speed":"Alt-Speed"
,"system-config":"Config"
,"system-reload":"Reload"
,"about":"About"
,"reload-time":"Auto Reload:"
,"reload-time-unit":"s/time"
,"autoreload-disabled":"Disabled"
,"autoreload-enabled":"Enabled"
,"search-prompt":"Search Local Torrents"
,"tracker-replace":"Replace trackers"
,"queue":"Queue"
,"ui-mobile":"Mobile UI"
,"ui-original":"Original UI"
,"ui-computer":"Desktop UI"
,"plugin":"Extensions/plugins"
,"rename":"Rename"
,"tip":{
"start":"Start the checked torrents"
,"pause":"Pause the checked torrents"
,"recheck":"Recheck the checked torrents"
,"recheck-confirm":"Are you sure you want to re-check the selected torrents? This may take some time!"
,"start-all":"Start all"
,"pause-all":"Pause all"
,"remove":"Remove"
,"delete-all":"Delete-all"
,"delete-data":"Delete-data"
,"add-torrent":"Add torrent(s)"
,"attribute":"Attribute"
,"alt-speed":"Alt-speed"
,"system-config":"Config"
,"system-reload":"Reload"
,"about":"About this app"
,"autoreload-disabled":"Auto reload is disabled"
,"autoreload-enabled":"Auto reload is enabled"
,"tracker-replace":"Replace trackers"
,"change-download-dir":"Change download location"
,"ui-mobile":"Mobile UI"
,"ui-original":"Original UI"
,"more-peers":"Ask tracker for more peers"
,"rename":"Renaming a Torrent's Path"
},
"error": {
"data-error": "Error recieving data!",
"data-post-error": "Error posting data!",
"rename-error": "Error renaming file/folder!"
},
"config": {
"save-path": "Download directory"
},
"toolbar": {
"start": "Start",
"pause": "Pause",
"recheck": "Recheck",
"start-all": "Start all",
"pause-all": "Pause all",
"remove": "Remove",
"remove-all": "Remove all",
"remove-data": "Remove data",
"add-torrent": "Add Torrent",
"attribute": "Attribute",
"alt-speed": "Alt-Speed",
"system-config": "Config",
"system-reload": "Reload",
"about": "About",
"reload-time": "Auto Reload:",
"reload-time-unit": "s/time",
"autoreload-disabled": "Disabled",
"autoreload-enabled": "Enabled",
"search-prompt": "Search Local Torrents",
"tracker-replace": "Replace trackers",
"queue": "Queue",
"ui-mobile": "Mobile UI",
"ui-original": "Original UI",
"ui-computer": "Desktop UI",
"plugin": "Extensions/plugins",
"rename": "Rename",
"tip": {
"start": "Start the checked torrents",
"pause": "Pause the checked torrents",
"recheck": "Recheck the checked torrents",
"recheck-confirm": "Are you sure you want to re-check the selected torrents? This may take some time!",
"start-all": "Start all",
"pause-all": "Pause all",
"remove": "Remove",
"delete-all": "Delete-all",
"delete-data": "Delete-data",
"add-torrent": "Add torrent(s)",
"attribute": "Attribute",
"alt-speed": "Alt-speed",
"system-config": "Config",
"system-reload": "Reload",
"about": "About this app",
"autoreload-disabled": "Auto reload is disabled",
"autoreload-enabled": "Auto reload is enabled",
"tracker-replace": "Replace trackers",
"change-download-dir": "Change download location",
"ui-mobile": "Mobile UI",
"ui-original": "Original UI",
"more-peers": "Ask tracker for more peers",
"rename": "Renaming a Torrent's Path"
}
}
,"menus":{
"queue":{
"move-top":"Move to top"
,"move-up":"Move up"
,"move-down":"Move down"
,"move-bottom":"Move to bottom"
}
,"plugin": {
},
"menus": {
"queue": {
"move-top": "Move to top",
"move-up": "Move up",
"move-down": "Move down",
"move-bottom": "Move to bottom"
},
"plugin": {
"auto-match-data-folder": "Automatically matches data directory"
}
}
,"title":{
"left":"Navigation"
,"list":"Torrents"
,"attribute":"Attribute"
,"status":"Status"
}
,"tree":{
"all":"All"
,"active":"Active"
,"paused":"Paused"
,"downloading":"Downloading"
,"sending":"Seeding"
,"error":"Error"
,"warning":"Warning"
,"actively":"Active"
,"check":"Checking"
,"wait":"Waiting"
,"search-result":"Search Result"
,"status":{
"loading":"Loading..."
}
,"statistics":"Statistics"
,"statistics":{
"title":"Statistics"
,"cumulative":"Cumulative"
,"current":"Current"
,"uploadedBytes":"UploadedBytes: "
,"downloadedBytes":"DownloadedBytes: "
,"filesAdded":"FilesAdded: "
,"sessionCount":"SessionCount: "
,"secondsActive":"SecondsActive: "
}
,"servers":"Trackers"
,"folders":"Folders"
,"toolbar":{
"nav":{
"folders":"Folders"
},
"title": {
"left": "Navigation",
"list": "Torrents",
"attribute": "Attribute",
"status": "Status"
},
"tree": {
"all": "All",
"active": "Active",
"paused": "Paused",
"downloading": "Downloading",
"sending": "Seeding",
"error": "Error",
"warning": "Warning",
"actively": "Active",
"check": "Checking",
"wait": "Waiting",
"search-result": "Search Result",
"status": {
"loading": "Loading..."
},
"statistics": "Statistics",
"statistics": {
"title": "Statistics",
"cumulative": "Cumulative",
"current": "Current",
"uploadedBytes": "UploadedBytes: ",
"downloadedBytes": "DownloadedBytes: ",
"filesAdded": "FilesAdded: ",
"sessionCount": "SessionCount: ",
"secondsActive": "SecondsActive: "
},
"servers": "Trackers",
"folders": "Folders",
"toolbar": {
"nav": {
"folders": "Folders"
}
}
}
,"statusbar":{
"downloadspeed":"Download speed:"
,"uploadspeed":"Seed speed:"
,"version":"Version:"
}
,"dialog":{
"torrent-add":{
"download-dir":"Download Dir:"
,"torrent-url":"Torrent URL:"
,"tip-torrent-url":"Tip: Please add multiple content with an 'Enter' key press to separate"
,"autostart":"Auto Start:"
,"tip-autostart":""
,"set-default-download-dir":"Set as default directory"
,"upload-file":"Torrent file(s):"
,"nosource":"No torrent file or URL."
,"tip-title":"Uploading the torrent file takes precedence over the torrent URL"
}
,"system-config":{
"title":"Server Config"
,"tabs":{
"base":"Base"
,"network":"Network"
,"limit":"Limit"
,"alt-speed":"Scheduled"
,"dictionary-folders":"Folders Dictionary"
},
"statusbar": {
"downloadspeed": "Download speed:",
"uploadspeed": "Seed speed:",
"version": "Version:"
},
"dialog": {
"torrent-add": {
"download-dir": "Download Dir:",
"torrent-url": "Torrent URL:",
"tip-torrent-url": "Tip: Please add multiple content with an 'Enter' key press to separate",
"autostart": "Auto Start:",
"tip-autostart": "",
"set-default-download-dir": "Set as default directory",
"upload-file": "Torrent file(s):",
"nosource": "No torrent file or URL.",
"tip-title": "Uploading the torrent file takes precedence over the torrent URL"
},
"system-config": {
"title": "Server Config",
"tabs": {
"base": "Base",
"network": "Network",
"limit": "Limit",
"alt-speed": "Scheduled",
"dictionary-folders": "Folders Dictionary"
},
"config-dir": "Location of transmission's configuration directory:",
"download-dir": "Default path to download torrents:",
"download-dir-free-space": "Free space:",
"incomplete-dir-enabled": "Use incomplete directory",
"cache-size-mb": "Disk cache size:",
"rename-partial-files": "Append '.part' to incomplete files",
"start-added-torrents": "Auto start added torrents",
"download-queue-enabled": "Enabled download queue, max queue number:",
"seed-queue-enabled": "Enabled seed queue, max queue number:",
"peer-port-random-on-start": "Use random port on start",
"port-forwarding-enabled": "Enabled forwarding",
"test-port": "Test the port",
"port-is-open-true": "The port is open",
"port-is-open-false": "The port is closed",
"testing": "Testing...",
"encryption": "Encryption:",
"encryption-type": {
"required": "Required",
"preferred": "Preferred",
"tolerated": "Tolerated"
},
"utp-enabled": "Enabled µTP (UPnP)",
"dht-enabled": "Enabled DHT",
"lpd-enabled": "Enabled LPD",
"pex-enabled": "Enabled PEX",
"peer-limit-global": "Maximum global number of peers:",
"peer-limit-per-torrent": "Maximum peers number of torrent:",
"speed-limit-down-enabled": "Max global download speed:",
"speed-limit-up-enabled": "Max global upload speed:",
"alt-speed-enabled": "Use the alt speeds",
"alt-speed-down": "Max global download speed:",
"alt-speed-up": "Max global upload speed:",
"alt-speed-time-enabled": "Use scheduled",
"alt-speed-time": "Time",
"weekday": {
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday",
"0": "Sunday"
},
"blocklist-enabled": "Use blocklist",
"blocklist-size": "Blocklist has %n rules.",
"seedRatioLimited": "The default seed ratio for torrents to use:",
"queue-stalled-enabled": "Whether or not to consider idle torrents as stalled:",
"idle-seeding-limit-enabled": "Torrents we're seeding will be stopped if they're idle for this long:",
"minutes": "Minutes",
"nochange": "No change",
"saving": "Saving..."
},
"public": {
"button-ok": "OK",
"button-cancel": "Cancel",
"button-reload": "Reload",
"button-save": "Save",
"button-close": "Close",
"button-update": "Update",
"button-config": "Config"
},
"about": {
"infos": "Authorculturist<br/>StatementMost of the icons used in this program from the network, if any violation of your rights, please contact me delete.",
"check-update": "Check Update",
"home": "Project Home",
"help": "Wiki"
},
"torrent-remove": {
"title": "Remove confirm",
"confirm-text": "Are you sure you want to remove the checked torrent(s)?",
"remove-data": "Delete local data",
"remove-error": "Delete failed!"
},
"torrent-changeDownloadDir": {
"title": "Set new dir",
"old-download-dir": "Old dir:",
"new-download-dir": "New dir:",
"move-data": "If checked, move from previous location. otherwise, search 'New dir' for files.",
"set-error": "set error!",
"recheck-data": "Recheck data."
},
"system-replaceTracker": {
"title": "Replace Trackers",
"old-tracker": "Old tracker:",
"new-tracker": "New tracker:",
"tip": "This function will find <b>all torrents</b> Tracker.",
"not-found": "Tracker is not found."
},
"auto-match-data-folder": {
"title": "Automatically matches data directory",
"torrent-count": "Torrent count:",
"folder-count": "Folder count:",
"dictionary": "Folders Dictionary",
"time-begin": "Begin time:",
"time-now": "Now:",
"status": "Status:",
"ignore": "Ignore",
"working-close-confirm": "Torrents are currently downloading, are sure you want to close Transmission?",
"time-interval": "Time interval (seconds):",
"work-mode-title": "Mode:",
"work-mode": {
"1": "Individually matched by torrent",
"2": "Individually matched by folder"
}
,"config-dir":"Location of transmission's configuration directory:"
,"download-dir":"Default path to download torrents:"
,"download-dir-free-space":"Free space:"
,"incomplete-dir-enabled":"Use incomplete directory"
,"cache-size-mb":"Disk cache size:"
,"rename-partial-files":"Append '.part' to incomplete files"
,"start-added-torrents":"Auto start added torrents"
,"download-queue-enabled":"Enabled download queue, max queue number:"
,"seed-queue-enabled":"Enabled seed queue, max queue number:"
,"peer-port-random-on-start":"Use random port on start"
,"port-forwarding-enabled":"Enabled forwarding"
,"test-port":"Test the port"
,"port-is-open-true":"The port is open"
,"port-is-open-false":"The port is closed"
,"testing":"Testing..."
,"encryption":"Encryption:"
,"encryption-type":{
"required":"Required"
,"preferred":"Preferred"
,"tolerated":"Tolerated"
}
,"utp-enabled":"Enabled µTP (UPnP)"
,"dht-enabled":"Enabled DHT"
,"lpd-enabled":"Enabled LPD"
,"pex-enabled":"Enabled PEX"
,"peer-limit-global":"Maximum global number of peers:"
,"peer-limit-per-torrent":"Maximum peers number of torrent:"
,"speed-limit-down-enabled":"Max global download speed:"
,"speed-limit-up-enabled":"Max global upload speed:"
,"alt-speed-enabled":"Use the alt speeds"
,"alt-speed-down":"Max global download speed:"
,"alt-speed-up":"Max global upload speed:"
,"alt-speed-time-enabled":"Use scheduled"
,"alt-speed-time":"Time"
,"weekday":{
"1":"Monday"
,"2":"Tuesday"
,"3":"Wednesday"
,"4":"Thursday"
,"5":"Friday"
,"6":"Saturday"
,"0":"Sunday"
}
,"blocklist-enabled":"Use blocklist"
,"blocklist-size":"Blocklist has %n rules."
,"seedRatioLimited":"The default seed ratio for torrents to use:"
,"queue-stalled-enabled":"Whether or not to consider idle torrents as stalled:"
,"idle-seeding-limit-enabled":"Torrents we're seeding will be stopped if they're idle for this long:"
,"minutes":"Minutes"
,"nochange":"No change"
,"saving":"Saving..."
}
,"public":{
"button-ok":"OK"
,"button-cancel":"Cancel"
,"button-reload":"Reload"
,"button-save":"Save"
,"button-close":"Close"
,"button-update":"Update"
,"button-config":"Config"
}
,"about":{
"infos":"Authorculturist<br/>StatementMost of the icons used in this program from the network, if any violation of your rights, please contact me delete."
,"check-update":"Check Update"
}
,"torrent-remove":{
"title":"Remove confirm"
,"confirm-text":"Are you sure you want to remove the checked torrent(s)?"
,"remove-data":"Delete local data"
,"remove-error":"Delete failed!"
}
,"torrent-changeDownloadDir":{
"title":"Set new dir"
,"old-download-dir":"Old dir:"
,"new-download-dir":"New dir:"
,"move-data":"If checked, move from previous location. otherwise, search 'New dir' for files."
,"set-error":"set error!"
,"recheck-data":"Recheck data."
}
,"system-replaceTracker":{
"title":"Replace Trackers"
,"old-tracker":"Old tracker:"
,"new-tracker":"New tracker:"
,"tip":"This function will find <b>all torrents</b> Tracker."
,"not-found":"Tracker is not found."
}
,"auto-match-data-folder":{
"title":"Automatically matches data directory"
,"torrent-count":"Torrent count:"
,"folder-count":"Folder count:"
,"dictionary":"Folders Dictionary"
,"time-begin":"Begin time:"
,"time-now":"Now:"
,"status":"Status:"
,"ignore":"Ignore"
,"working-close-confirm":"Torrents are currently downloading, are sure you want to close Transmission?"
,"time-interval":"Time interval (seconds):"
,"work-mode-title":"Mode:"
,"work-mode":{
"1":"Individually matched by torrent"
,"2":"Individually matched by folder"
}
}
,"torrent-rename": {
"title":"Renaming a Torrent's Path",
},
"torrent-rename": {
"title": "Renaming a Torrent's Path",
"oldname": "Old",
"newname": "New"
},
@ -261,128 +264,129 @@ system.defaultLang = {
"title": "Add Trackers",
"tip": "One Line One Tracker"
}
}
,"torrent":{
"fields":{
"id":"#"
,"name":"Name"
,"hashString":"HASH"
,"downloadDir":"Download Dir"
,"totalSize":"Total size"
,"status":"Status"
,"percentDone":"Percent done"
,"remainingTime":"Remaining time"
,"addedDate":"Date added"
,"completeSize":"Complete size"
,"rateDownload":"Dowload Rate"
,"rateUpload":"Upload rate"
,"leecherCount":"Leecher"
,"seederCount":"Seeder"
,"uploadedEver":"Uploaded till date"
,"uploadRatio":"Ratio"
,"queuePosition":"Queue"
}
,"status-text":{
"0":"Paused"
,"1":"Wait check"
,"2":"Checking"
,"3":"Wait download"
,"4":"Downloading"
,"5":"Wait seed"
,"6":"Seeding"
}
,"attribute":{
"tabs":{
"base":"Base"
,"servers":"Trackers"
,"files":"Files"
,"users":"Peers"
,"config":"Config"
}
,"files-fields":{
"name":"Name"
,"length":"Size"
,"percentDone":"Percent done"
,"bytesCompleted":"Complete size"
,"wanted":"Wanted"
,"priority":"Priority"
}
,"servers-fields":{
"announce":"Announce"
,"announceState":"Status"
,"lastAnnounceResult":"Infos"
,"lastAnnounceSucceeded":"Succeeded"
,"lastAnnounceTime":"AnnounceTime"
,"lastAnnounceTimedOut":"TimedOut"
,"downloadCount":"Download count"
,"nextAnnounceTime":"Next announce"
}
,"peers-fields":{
"address":"IP address"
,"clientName":"Client"
,"flagStr":"Flag"
,"progress":"Progress"
,"rateToClient":"RateToClient"
,"rateToPeer":"RateToPeer"
}
,"status":{
"true":"True"
,"false":"False"
}
,"priority":{
"0":"Normal"
,"1":"High"
,"-1":"Low"
}
,"label":{
"name":"Name:"
,"addedDate":"Added date:"
,"totalSize":"Total size:"
,"completeSize":"Complete size:"
,"leftUntilDone":"Left until done:"
,"hashString":"HASH:"
,"downloadDir":"Download dir:"
,"status":"Status:"
,"rateDownload":"Rate download:"
,"rateUpload":"Rate upload:"
,"leecherCount":"Leecher:"
,"seederCount":"Seeder:"
,"uploadedEver":"Uploaded ever:"
,"uploadRatio":"Upload Ratio:"
,"creator":"Creator:"
,"dateCreated":"Date created:"
,"comment":"Comment:"
,"errorString":"Error string:"
,"downloadLimited":"Max global download speed"
,"uploadLimited":"Max global upload speed"
,"peer-limit":"Maximum peers for this torrent"
,"seedRatioMode":"Seed ratio for torrents to use"
,"seedIdleMode":"Torrents we're seeding will be stopped if they're idle for this long"
}
,"tip":{
"button-allow":"Download checked file(s)"
,"button-deny":"Skip checked file(s)"
,"button-priority":"Set priority"
}
,"other":{
"tracker-remove-confim":"Are you sure you want to remove this Tracker?"
},
"torrent": {
"fields": {
"id": "#",
"name": "Name",
"hashString": "HASH",
"downloadDir": "Download Dir",
"totalSize": "Total size",
"status": "Status",
"percentDone": "Percent done",
"remainingTime": "Remaining time",
"addedDate": "Date added",
"completeSize": "Complete size",
"rateDownload": "Dowload Rate",
"rateUpload": "Upload rate",
"leecherCount": "Leecher",
"seederCount": "Seeder",
"uploadedEver": "Uploaded till date",
"uploadRatio": "Ratio",
"queuePosition": "Queue",
"activityDate": "Activity Date"
},
"status-text": {
"0": "Paused",
"1": "Wait check",
"2": "Checking",
"3": "Wait download",
"4": "Downloading",
"5": "Wait seed",
"6": "Seeding"
},
"attribute": {
"tabs": {
"base": "Base",
"servers": "Trackers",
"files": "Files",
"users": "Peers",
"config": "Config"
},
"files-fields": {
"name": "Name",
"length": "Size",
"percentDone": "Percent done",
"bytesCompleted": "Complete size",
"wanted": "Wanted",
"priority": "Priority"
},
"servers-fields": {
"announce": "Announce",
"announceState": "Status",
"lastAnnounceResult": "Infos",
"lastAnnounceSucceeded": "Succeeded",
"lastAnnounceTime": "AnnounceTime",
"lastAnnounceTimedOut": "TimedOut",
"downloadCount": "Download count",
"nextAnnounceTime": "Next announce"
},
"peers-fields": {
"address": "IP address",
"clientName": "Client",
"flagStr": "Flag",
"progress": "Progress",
"rateToClient": "RateToClient",
"rateToPeer": "RateToPeer"
},
"status": {
"true": "True",
"false": "False"
},
"priority": {
"0": "Normal",
"1": "High",
"-1": "Low"
},
"label": {
"name": "Name:",
"addedDate": "Added date:",
"totalSize": "Total size:",
"completeSize": "Complete size:",
"leftUntilDone": "Left until done:",
"hashString": "HASH:",
"downloadDir": "Download dir:",
"status": "Status:",
"rateDownload": "Rate download:",
"rateUpload": "Rate upload:",
"leecherCount": "Leecher:",
"seederCount": "Seeder:",
"uploadedEver": "Uploaded ever:",
"uploadRatio": "Upload Ratio:",
"creator": "Creator:",
"dateCreated": "Date created:",
"comment": "Comment:",
"errorString": "Error string:",
"downloadLimited": "Max global download speed",
"uploadLimited": "Max global upload speed",
"peer-limit": "Maximum peers for this torrent",
"seedRatioMode": "Seed ratio for torrents to use",
"seedIdleMode": "Torrents we're seeding will be stopped if they're idle for this long"
},
"tip": {
"button-allow": "Download checked file(s)",
"button-deny": "Skip checked file(s)",
"button-priority": "Set priority"
},
"other": {
"tracker-remove-confim": "Are you sure you want to remove this Tracker?"
}
}
}
,"torrent-head":{
"buttons":{
"autoExpandAttribute":"Auto expand attribute"
},
"torrent-head": {
"buttons": {
"autoExpandAttribute": "Auto expand attribute"
}
},
"public": {
"text-unknown": "Unknown",
"text-drop-title": "Drag and drop the file in your browser to add to Transmission.",
"text-saved": "Saved",
"text-nochange": "No change",
"text-info": "Infos",
"text-confirm": "Are you sure?",
"text-browsers-not-support-features": "The current browser does not support this feature!",
"text-download-update": "Download this update",
"text-have-update": "An update is available"
}
,"public":{
"text-unknown":"Unknown"
,"text-drop-title":"Drag and drop the file in your browser to add to Transmission."
,"text-saved":"Saved"
,"text-nochange":"No change"
,"text-info":"Infos"
,"text-confirm":"Are you sure?"
,"text-browsers-not-support-features":"The current browser does not support this feature!"
,"text-download-update":"Download this update"
,"text-have-update":"An update is available"
}
};
};

View File

@ -8,7 +8,8 @@ system.lang = {
"connected": "已连接至服务器",
"queue": "队列:",
"queuefinish": "本次队列完成。",
"notfinal": "未完成……"
"notfinal": "未完成……",
"checked": "已选中 %n 条数据:"
}
},
"error": {
@ -210,8 +211,10 @@ system.lang = {
"button-config": "设置"
},
"about": {
"infos": "程序设计、制作:栽培者<br/>声明:本程序使用的大部分图标来自网络,如有侵犯您的权益,请与本人联系删除。<br/>如您有什么意见建议,也欢迎与我联系。",
"check-update": "检查更新"
"infos": "程序设计:栽培者<br/>使用帮助:<a href='https://github.com/ronggang/transmission-web-control/wiki/Home-CN'>查看</a><br/>QQ群723130968 <a target='_blank' href='https://shang.qq.com/wpa/qunwpa?idkey=353d3f247de2b78c071e28a31777022424660c97c9fdd6f25640a4a51c6b9d65' ><img border='0' src='https://pub.idqqimg.com/wpa/images/group.png' alt='Transmission Web Control' title='Transmission Web Control (723130968)'></a>",
"check-update": "检查更新",
"home": "项目主页",
"help": "使用帮助"
},
"torrent-remove": {
"title": "删除种子确认",
@ -279,7 +282,8 @@ system.lang = {
"seederCount": "种子|活跃",
"uploadedEver": "已上传",
"uploadRatio": "分享率",
"queuePosition": "队列"
"queuePosition": "队列",
"activityDate": "最后活动于"
},
"status-text": {
"0": "已暂停",

View File

@ -1,31 +1,35 @@
var system={version:"1.4.1",rootPath:"tr-web-control/",codeupdate:"20180208",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},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:{},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);">'+
var system={version:"1.5.0",rootPath:"tr-web-control/",codeupdate:"20180308",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},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"])},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:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,
iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",
text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},
{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(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)},initTorrentTable:function(){function a(){b&&$(b).remove();b=$("<div/>").appendTo("body");b.menu({onClick:function(j){if(j.iconCls=="icon-ok"){system.control.torrentlist.datagrid("hideColumn",j.name);b.menu("setIcon",{target:j.target,iconCls:"icon-empty"})}else{system.control.torrentlist.datagrid("showColumn",j.name);b.menu("setIcon",{target:j.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,j){system.checkTorrentRow(h,j)},onUncheck:function(h,j){system.checkTorrentRow(h,j)},onCheckAll:function(){system.checkTorrentRow("all",false)},onUncheckAll:function(){system.checkTorrentRow("all",true)},onSelect:function(h,j){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(j.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,j){var i=h;if(h=="remainingTime")i="remainingTimeRaw";i=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(i,
j));system.control.torrentlist.datagrid("loadData",i);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=h;system.userConfig.torrentList.sortOrder=j;system.saveUserConfig()},onRowContextMenu:function(h,j){system.control.torrentlist.datagrid("uncheckAll");system.control.torrentlist.datagrid("checkRow",j);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","icon"),disabled:d.find("#toolbar_changeDownloadDir").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(){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:false});
this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_queue").menubutton("enable")},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]);this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]);this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/
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:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,
iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,
state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,
children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(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)},initTorrentTable:function(){function a(){b&&$(b).remove();b=$("<div/>").appendTo("body");b.menu({onClick:function(j){if(j.iconCls=="icon-ok"){system.control.torrentlist.datagrid("hideColumn",j.name);b.menu("setIcon",
{target:j.target,iconCls:"icon-empty"})}else{system.control.torrentlist.datagrid("showColumn",j.name);b.menu("setIcon",{target:j.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,j){system.checkTorrentRow(h,j)},onUncheck:function(h,j){system.checkTorrentRow(h,
j)},onCheckAll:function(){system.checkTorrentRow("all",false)},onUncheckAll:function(){system.checkTorrentRow("all",true)},onSelect:function(h,j){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(j.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,j){var i=h;if(h=="remainingTime")i="remainingTimeRaw";i=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(i,j));system.control.torrentlist.datagrid("loadData",i);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=h;system.userConfig.torrentList.sortOrder=
j;system.saveUserConfig()},onRowContextMenu:function(h,j){system.checkedRows.length==0&&system.control.torrentlist.datagrid("checkRow",j);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",
@ -33,7 +37,7 @@ this.lang.toolbar.tip["start-all"]).click(function(){var a=$(this),b=a.linkbutto
transmission.exec({method:"torrent-stop"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true}).attr("title",
this.lang.toolbar.tip.recheck).click(function(){var a=system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(a.length==1)if(transmission.torrents.all[a[0].id].percentDone>0)confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this));else system.changeSelectedTorrentStatus("verify",$(this));else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true}).click(function(){system.changeSelectedTorrentStatus("reannounce",
$(this))});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.remove).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:b}})});this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:true}).click(function(){var a=
system.control.torrentlist.datagrid("getChecked");a.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:true},datas:{id:a[0].id}})});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",
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=="icon-alt-speed-false")b=true;transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":b}},function(c){if(c.result=="success"){system.serverConfig["alt-speed-enabled"]=b;a.linkbutton({iconCls:"icon-alt-speed-"+
b.toString()});b?$("#status_alt_speed").show():$("#status_alt_speed").hide()}});a.linkbutton({iconCls:"icon-loading"})});this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:true}})});this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()});
this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(a){system.searchTorrents(a)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed);this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0);transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()};
@ -52,15 +56,15 @@ system.config.reloadStep);system.updateTreeNodeText("torrent-all",system.lang.tr
formatSize(system.serverSessionStats["current-stats"][i]));break;case "secondsActive":system.updateTreeNodeText(i,system.lang.tree.statistics[i]+getTotalTime(system.serverSessionStats["cumulative-stats"][i]*1E3));system.updateTreeNodeText("current-"+i,system.lang.tree.statistics[i]+getTotalTime(system.serverSessionStats["current-stats"][i]*1E3));break;default:system.updateTreeNodeText(i,system.lang.tree.statistics[i]+system.serverSessionStats["cumulative-stats"][i]);system.updateTreeNodeText("current-"+
i,system.lang.tree.statistics[i]+system.serverSessionStats["current-stats"][i])}});for(d in transmission.torrents.folders)a.folders[transmission.torrents.folders[d].nodeid]=null;this.loadFolderList(a.folders);navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(a,b){var c="";if(a>0)c=" <span class='nav-torrents-number'>("+a+")</span>";if(b>0)c+="<span class='nav-total-size'>["+formatSize(b)+"]</span>";return c},
getServerStatus:function(){if(!this.reloading){clearTimeout(this.autoReloadTimer);this.reloading=true;transmission.getStatus(function(a){system.reloading=false;$("#status_downloadspeed").html(formatSize(a.downloadSpeed,false,"speed"));$("#status_uploadspeed").html(formatSize(a.uploadSpeed,false,"speed"));system.serverSessionStats=a;if(a.torrentCount==0){(a=system.panel.left.tree("find","servers"))&&system.panel.left.tree("remove",a.target);system.updateTreeNodeText("torrent-all",system.lang.tree.all)}})}},
showStatus:function(a,b){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south");this.panel.status_text.show();this.panel.status_text.html(a);if(b!=0){if(b==undefined)b=3E3;this.panel.status_text.fadeOut(b,function(){$("#layout_left").layout("collapse","south")})}},updateTreeNodeText:function(a,b,c){if(a=this.panel.left.tree("find",a)){b={target:a.target,text:b};if(c!=undefined)b.iconCls=c;this.panel.left.tree("update",b)}},appendTreeNode:function(a,b){var c=null;(c=
typeof a=="string"?this.panel.left.tree("find",a):a)?this.panel.left.tree("append",{parent:c.target,data:b}):this.panel.left.tree("append",{data:b})},removeTreeNode:function(a){(a=this.panel.left.tree("find",a))&&this.panel.left.tree("remove",a.target)},loadTorrentToList:function(a){if(transmission.torrents.all){jQuery.extend({node:null,page:1},a);if(a.node){var b=null,c=this.panel.left.tree("getParent",a.node.target)||{id:""},e=this.panel.left.data("currentNodeId");if(e!=a.node.id){this.control.torrentlist.datagrid({pageNumber:1});
e=a.node.id}this.panel.left.data("currentNodeId",e);switch(c.id){case "servers":b=transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case "torrent-all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;case "sending":b=transmission.torrents.status[transmission._status.seed];break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];break;case "check":b=transmission.torrents.status[transmission._status.check];
break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":b=transmission.torrents.actively;break;case "error":b=transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;case "search-result":b=transmission.torrents.searchResult;break;default:if(a.node.id.indexOf("folders-")!=
-1)if(c=transmission.torrents.folders[a.node.id])b=c.torrents}}if(this.config.defaultSelectNode!=a.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=a.node.id;this.saveConfig()}a=[];for(var 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=
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":b=transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case "torrent-all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;case "sending":b=transmission.torrents.status[transmission._status.seed];break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];
break;case "check":b=transmission.torrents.status[transmission._status.check];break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":b=transmission.torrents.actively;break;case "error":b=transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;
case "search-result":b=transmission.torrents.searchResult;break;default:if(a.node.id.indexOf("folders-")!=-1)if(c=transmission.torrents.folders[a.node.id])b=c.torrents}}if(this.config.defaultSelectNode!=a.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=a.node.id;this.saveConfig()}a=[];for(var 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=
"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=
@ -76,12 +80,12 @@ b[e],f={},g;for(g in d)switch(g){case "lastAnnounceTime":case "nextAnnounceTime"
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=
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();this.checkTorrentRow("all",false)},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}]);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(";"),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(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}]);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(";"),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};

View File

@ -1,6 +1,6 @@
transmission.torrents={all:null,puased:null,downloading:null,actively:null,searchResult:null,error:null,warning:null,folders:{},status:{},count:0,totalSize:0,loadSimpleInfo:false,activeTorrentCount:0,pausedTorrentCount:0,fields:{base:"id,name,status,hashString,totalSize,percentDone,addedDate,trackerStats,leftUntilDone,rateDownload,rateUpload,recheckProgress,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,downloadDir,error,errorString,doneDate,queuePosition",
status:"id,status,percentDone,trackerStats,leftUntilDone,rateDownload,rateUpload,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,error,errorString,doneDate,queuePosition",config:"downloadLimit,downloadLimited,peer-limit,seedIdleLimit,seedIdleMode,seedRatioLimit,seedRatioMode,uploadLimit,uploadLimited"},datas:{},recently:null,removed:null,isRecentlyActive:false,newIds:[],getallids:function(b,e,c){var a=this.fields.base;if(this.loadSimpleInfo&&this.all)a=
this.fields.status;a=a.split(",");$.isArray(c)&&$.unique($.merge(a,c));arguments={fields:a};this.isRecentlyActive=false;if(this.all&&e==undefined){arguments.ids="recently-active";this.isRecentlyActive=true}else if(e)arguments.ids=e;if(!this.all)this.all={};transmission.exec({method:"torrent-get",arguments:arguments},function(g){if(g.result=="success"){transmission.torrents.newIds.length=0;transmission.torrents.loadSimpleInfo=true;transmission.torrents.recently=g.arguments.torrents;transmission.torrents.removed=
transmission.torrents={all:null,puased:null,downloading:null,actively:null,searchResult:null,error:null,warning:null,folders:{},status:{},count:0,totalSize:0,loadSimpleInfo:false,activeTorrentCount:0,pausedTorrentCount:0,fields:{base:"id,name,status,hashString,totalSize,percentDone,addedDate,trackerStats,leftUntilDone,rateDownload,rateUpload,recheckProgress,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,downloadDir,error,errorString,doneDate,queuePosition,activityDate",
status:"id,status,percentDone,trackerStats,leftUntilDone,rateDownload,rateUpload,rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,error,errorString,doneDate,queuePosition,activityDate",config:"downloadLimit,downloadLimited,peer-limit,seedIdleLimit,seedIdleMode,seedRatioLimit,seedRatioMode,uploadLimit,uploadLimited"},datas:{},recently:null,removed:null,isRecentlyActive:false,newIds:[],getallids:function(b,e,c){var a=this.fields.base;if(this.loadSimpleInfo&&
this.all)a=this.fields.status;a=a.split(",");$.isArray(c)&&$.unique($.merge(a,c));arguments={fields:a};this.isRecentlyActive=false;if(this.all&&e==undefined){arguments.ids="recently-active";this.isRecentlyActive=true}else if(e)arguments.ids=e;if(!this.all)this.all={};transmission.exec({method:"torrent-get",arguments:arguments},function(g){if(g.result=="success"){transmission.torrents.newIds.length=0;transmission.torrents.loadSimpleInfo=true;transmission.torrents.recently=g.arguments.torrents;transmission.torrents.removed=
g.arguments.removed;transmission.torrents.splitid();b&&b(g.arguments.torrents)}else{transmission.torrents.datas=null;b&&b(null)}})},splitid:function(){this.downloading=[];this.puased=[];this.actively=[];this.error=[];this.warning=[];transmission.downloadDirs=[];var b=transmission._status;this.status={};transmission.trackers={};this.totalSize=0;this.folders={};this.count=0;var e=new Base64,c;for(c in this.recently){var a=this.recently[c];this.datas[a.id]=a}var g=[];for(c in this.removed){a=this.removed[c];
g.push(a)}for(c in this.datas){a=this.datas[c];if(!a)return;if($.inArray(a.id,g)!=-1&&g.length>0){if(this.all[a.id]){this.all[a.id]=null;delete this.all[a.id]}this.datas[c]=null;delete this.datas[c]}else{this.isRecentlyActive&&!this.all[a.id]&&this.newIds.push(a.id);a=$.extend(this.all[a.id],a);if(a.uploadedEver==0&&a.downloadedEver==0)a.uploadRatio="∞";a.infoIsLoading=false;var d=this.status[a.status];this.addTracker(a);if(!d){this.status[a.status]=[];d=this.status[a.status]}this.totalSize+=a.totalSize;
if(a.rateDownload>0&&a.leftUntilDone>0){a.remainingTime=getTotalTime(a.leftUntilDone/a.rateDownload*1E3);a.remainingTimeRaw=Math.floor(a.leftUntilDone/a.rateDownload*1E3)}else if(a.rateDownload==0&&a.leftUntilDone==0&&a.totalSize!=0){a.remainingTime=0;a.remainingTimeRaw=0}else{a.remainingTime="∞";a.remainingTimeRaw=31536E8}d.push(a);a.error!=0&&this.error.push(a);if(a.rateUpload>0||a.rateDownload>0)this.actively.push(a);switch(a.status){case b.stopped:this.puased.push(a);break;case b.download:this.downloading.push(a)}this.all[a.id]=

File diff suppressed because it is too large Load Diff

View File

@ -15,8 +15,8 @@ transmission.torrents = {
activeTorrentCount: 0,
pausedTorrentCount: 0,
fields: {
base: "id,name,status,hashString,totalSize,percentDone,addedDate,trackerStats,leftUntilDone,rateDownload,rateUpload,recheckProgress" + ",rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,downloadDir,error,errorString,doneDate,queuePosition",
status: "id,status,percentDone,trackerStats,leftUntilDone,rateDownload,rateUpload" + ",rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,error,errorString,doneDate,queuePosition",
base: "id,name,status,hashString,totalSize,percentDone,addedDate,trackerStats,leftUntilDone,rateDownload,rateUpload,recheckProgress" + ",rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,downloadDir,error,errorString,doneDate,queuePosition,activityDate",
status: "id,status,percentDone,trackerStats,leftUntilDone,rateDownload,rateUpload" + ",rateDownload,rateUpload,peersGettingFromUs,peersSendingToUs,uploadRatio,uploadedEver,downloadedEver,error,errorString,doneDate,queuePosition,activityDate",
config: "downloadLimit,downloadLimited,peer-limit,seedIdleLimit,seedIdleMode,seedRatioLimit,seedRatioMode,uploadLimit,uploadLimited"
},
// List of all the torrents that have been acquired

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,26 +1,36 @@
<div class="easyui-layout" data-options="fit:true" style="width:100%;height:100%;">
<div data-options="region:'center'" style="padding:5px 6px 0px 6px;border:0px;">
<div style="width:100%;padding:0px;">
<span id="dialog-about-version"></span>
<a href="https://github.com/ronggang/transmission-web-control/releases" target="_blank" style="float:right;" system-tip-lang="dialog['about']['check-update']" system-lang="dialog['about']['check-update']"></a>
<div style="width:100%;padding:5px 0 0 0;text-align:center;line-height: 25px;">
<img id="logo" src="tr-web-control/style/images/logo.png"/>
<div id="dialog-about-tr-version">Transmission</div>
<div id="dialog-about-version">Web Control</div>
<div>Copyright © 2012-2018 栽培者</div>
<div style="padding: 15px 0;">
<a href="https://github.com/ronggang/transmission-web-control" target="_blank" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-github'" system-tip-lang="dialog['about']['home']" system-lang="dialog['about']['home']"></a>
<a href="https://github.com/ronggang/transmission-web-control/wiki" target="_blank" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-help'" system-tip-lang="dialog['about']['help']" system-lang="dialog['about']['help']"></a>
<a href="https://github.com/ronggang/transmission-web-control/releases" target="_blank" class="easyui-linkbutton" data-options="iconCls:'iconfont tr-icon-update'" system-tip-lang="dialog['about']['check-update']" system-lang="dialog['about']['check-update']"></a>
</div>
<hr/>
<div style="padding-top: 5px;">
<span>Thanks : </span>
<a href="http://www.transmissionbt.com/" target="_blank" title="Transmission" class="easyui-linkbutton" >Transmission</a>
<a href="http://jquery.com/" target="_blank" title="jQuery" class="easyui-linkbutton" >jQuery</a>
<a href="http://www.jeasyui.com/" target="_blank" title="jQuery EasyUI" class="easyui-linkbutton" >EasyUI</a>
</div>
</div>
<hr/>
<div id="dialog-about-infos" style="width:100%;padding:0px;height:70px;" system-lang="dialog['about']['infos']"></div>
<hr/>
<a href="http://www.transmissionbt.com/" target="_blank" title="Transmission">Transmission</a>
<a href="http://jquery.com/" target="_blank" title="jQuery">jQuery</a>
<a href="http://www.jeasyui.com/" target="_blank" title="jQuery EasyUI">EasyUI</a>
</div>
<div data-options="region:'south',border:false" style="text-align:right;padding:6px;">
<a id="dialog-about-button-close" class="easyui-linkbutton" data-options="iconCls:'icon-close',plain:true" href="javascript:void(0);"><span system-lang="dialog['public']['button-close']"></span></a>
</div>
<!-- <div data-options="region:'south',border:false" style="text-align:right;padding:6px;">
<a id="dialog-about-button-close" class="easyui-linkbutton" data-options="iconCls:'icon-close',plain:true" href="javascript:void(0);"><span system-lang="dialog['public']['button-close']"></span></a>
</div> -->
</div>
<script type="text/javascript">
(function(thisDialog){
system.resetLangText(thisDialog);
thisDialog.find("#dialog-about-version").html("version: "+system.version+" ("+system.codeupdate+")");
thisDialog.find("#dialog-about-tr-version").html("Transmission: "+system.serverConfig.version+", RPC: "+system.serverConfig["rpc-version"]);
thisDialog.find("#dialog-about-version").html("Web Control: "+system.version+" ("+system.codeupdate+")");
thisDialog.find("#dialog-about-button-close").click(function()
{
thisDialog.dialog("close");

View File

@ -19,5 +19,6 @@
,{"field":"queuePosition","width":"30","align":"center"}
,{"field":"trackers","width":"100","align":"left","sortable":true}
,{"field":"downloadDir","width":200,"align":"left","sortable":true}
,{"field":"activityDate","width":130,"align":"center","sortable":true,"formatter":"longtime"}
]
}