Browse Source

Apply formatting to Web UI files

adaptive-webui-19844
Chocobo1 7 years ago
parent
commit
cf2c0bd47e
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 21
      src/webui/www/private/addtrackers.html
  2. 21
      src/webui/www/private/confirmdeletion.html
  3. 16
      src/webui/www/private/css/Core.css
  4. 401
      src/webui/www/private/css/Layout.css
  5. 60
      src/webui/www/private/css/Tabs.css
  6. 346
      src/webui/www/private/css/Window.css
  7. 11
      src/webui/www/private/css/dynamicTable.css
  8. 79
      src/webui/www/private/css/style.css
  9. 152
      src/webui/www/private/download.html
  10. 91
      src/webui/www/private/downloadlimit.html
  11. 26
      src/webui/www/private/filters.html
  12. 13
      src/webui/www/private/index.html
  13. 16
      src/webui/www/private/newcategory.html
  14. 73
      src/webui/www/private/preferences.html
  15. 2264
      src/webui/www/private/preferences_content.html
  16. 16
      src/webui/www/private/properties.html
  17. 116
      src/webui/www/private/properties_content.html
  18. 11
      src/webui/www/private/rename.html
  19. 215
      src/webui/www/private/scripts/client.js
  20. 49
      src/webui/www/private/scripts/contextmenu.js
  21. 2
      src/webui/www/private/scripts/download.js
  22. 2354
      src/webui/www/private/scripts/dynamicTable.js
  23. 18
      src/webui/www/private/scripts/misc.js
  24. 16
      src/webui/www/private/scripts/mocha-init.js
  25. 92
      src/webui/www/private/scripts/prop-files.js
  26. 42
      src/webui/www/private/scripts/prop-general.js
  27. 4
      src/webui/www/private/scripts/prop-trackers.js
  28. 4
      src/webui/www/private/scripts/prop-webseeds.js
  29. 11
      src/webui/www/private/setlocation.html
  30. 47
      src/webui/www/private/transferlist.html
  31. 138
      src/webui/www/private/upload.html
  32. 91
      src/webui/www/private/uploadlimit.html
  33. 2
      src/webui/www/public/css/style.css
  34. 77
      src/webui/www/public/login.html

21
src/webui/www/private/addtrackers.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Trackers addition dialog)QBT_TR[CONTEXT=TrackersAdditionDlg]</title> <title>QBT_TR(Trackers addition dialog)QBT_TR[CONTEXT=TrackersAdditionDlg]</title>
@ -7,9 +8,9 @@
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> <script src="scripts/lib/mootools-1.2-core-yc.js"></script>
<script src="scripts/lib/mootools-1.2-more.js"></script> <script src="scripts/lib/mootools-1.2-more.js"></script>
<script> <script>
window.addEvent('domready', function(){ window.addEvent('domready', function() {
$('trackersUrls').focus(); $('trackersUrls').focus();
$('addTrackersButton').addEvent('click', function(e){ $('addTrackersButton').addEvent('click', function(e) {
new Event(e).stop(); new Event(e).stop();
var hash = new URI().getData('hash'); var hash = new URI().getData('hash');
new Request({ new Request({
@ -23,17 +24,19 @@
window.parent.closeWindows(); window.parent.closeWindows();
} }
}).send(); }).send();
});
}); });
});
</script> </script>
</head> </head>
<body> <body>
<div style="text-align: center;"> <div style="text-align: center;">
<br/> <br/>
<h2 class="vcenter">QBT_TR(List of trackers to add (one per line):)QBT_TR[CONTEXT=TrackersAdditionDlg]</h2> <h2 class="vcenter">QBT_TR(List of trackers to add (one per line):)QBT_TR[CONTEXT=TrackersAdditionDlg]</h2>
<textarea name="list" id="trackersUrls" rows="10" cols="1"></textarea> <textarea name="list" id="trackersUrls" rows="10" cols="1"></textarea>
<br/> <br/>
<input type="button" value="QBT_TR(Add)QBT_TR[CONTEXT=HttpServer]" id="addTrackersButton"/> <input type="button" value="QBT_TR(Add)QBT_TR[CONTEXT=HttpServer]" id="addTrackersButton" />
</div> </div>
</body> </body>
</html> </html>

21
src/webui/www/private/confirmdeletion.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Deletion confirmation - qBittorrent)QBT_TR[CONTEXT=confirmDeletionDlg]</title> <title>QBT_TR(Deletion confirmation - qBittorrent)QBT_TR[CONTEXT=confirmDeletionDlg]</title>
@ -8,13 +9,13 @@
<script src="scripts/lib/mootools-1.2-more.js"></script> <script src="scripts/lib/mootools-1.2-more.js"></script>
<script> <script>
var hashes = new URI().getData('hashes').split('|'); var hashes = new URI().getData('hashes').split('|');
window.addEvent('domready', function(){ window.addEvent('domready', function() {
$('cancelBtn').focus(); $('cancelBtn').focus();
$('cancelBtn').addEvent('click', function(e){ $('cancelBtn').addEvent('click', function(e) {
new Event(e).stop(); new Event(e).stop();
window.parent.closeWindows(); window.parent.closeWindows();
}); });
$('confirmBtn').addEvent('click', function(e){ $('confirmBtn').addEvent('click', function(e) {
parent.torrentsTable.deselectAll(); parent.torrentsTable.deselectAll();
new Event(e).stop(); new Event(e).stop();
var cmd = 'api/v2/torrents/delete'; var cmd = 'api/v2/torrents/delete';
@ -34,13 +35,15 @@
}); });
</script> </script>
</head> </head>
<body> <body>
<br/> <br/>
<p>&nbsp;&nbsp;QBT_TR(Are you sure you want to delete the selected torrents from the transfer list?)QBT_TR[CONTEXT=HttpServer]</p> <p>&nbsp;&nbsp;QBT_TR(Are you sure you want to delete the selected torrents from the transfer list?)QBT_TR[CONTEXT=HttpServer]</p>
&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" id="deleteFromDiskCB"/> <label for="deleteFromDiskCB"><i>QBT_TR(Also delete the files on the hard disk)QBT_TR[CONTEXT=confirmDeletionDlg]</i></label><br/><br/> &nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" id="deleteFromDiskCB" /> <label for="deleteFromDiskCB"><i>QBT_TR(Also delete the files on the hard disk)QBT_TR[CONTEXT=confirmDeletionDlg]</i></label><br/><br/>
<div style="text-align: right;"> <div style="text-align: right;">
<input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" />&nbsp;&nbsp;<input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]"/>&nbsp;&nbsp; <input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" />&nbsp;&nbsp;<input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]" />&nbsp;&nbsp;
</div> </div>
</body> </body>
</html> </html>

16
src/webui/www/private/css/Core.css

@ -25,22 +25,22 @@ Notes:
/* Clears */ /* Clears */
.clear { .clear {
clear: both; clear: both;
height: 0; height: 0;
} }
* html .clear { * html .clear {
font-size: 1px; font-size: 1px;
line-height: 1px; line-height: 1px;
overflow: hidden; overflow: hidden;
visibility: hidden; visibility: hidden;
} }
/* Miscellaneous /* Miscellaneous
---------------------------------------------------------------- */ ---------------------------------------------------------------- */
#themeControl { #themeControl {
margin-top: 2px; margin-top: 2px;
} }
@ -50,5 +50,5 @@ Notes:
/* Folder Tree */ /* Folder Tree */
.tree li a { .tree li a {
color: #3f3f3f !important; color: #3f3f3f !important;
} }

401
src/webui/www/private/css/Layout.css

@ -19,184 +19,185 @@ Required by:
---------------------------------------------------------------- */ ---------------------------------------------------------------- */
html, body { html, body {
background: #fff; background: #fff;
} }
body { body {
margin: 0; /* Required */ margin: 0; /* Required */
} }
#desktop { #desktop {
position: relative; position: relative;
min-width: 400px; /* Helps keep header content from wrapping */ min-width: 400px; /* Helps keep header content from wrapping */
height: 100%; height: 100%;
min-height: 100%; min-height: 100%;
overflow: hidden; overflow: hidden;
cursor: default; /* Fix for issue in IE7. IE7 wants to use the I-bar text cursor */ cursor: default; /* Fix for issue in IE7. IE7 wants to use the I-bar text cursor */
} }
#desktopHeader { #desktopHeader {
background: #f2f2f2; background: #f2f2f2;
} }
#desktopTitlebarWrapper { #desktopTitlebarWrapper {
position: relative; position: relative;
height: 45px; height: 45px;
overflow: hidden; overflow: hidden;
background: #718BA6 url(../images/skin/bg-header.gif) repeat-x; background: #718BA6 url(../images/skin/bg-header.gif) repeat-x;
} }
#desktopTitlebar { #desktopTitlebar {
padding: 7px 8px 6px 8px; padding: 7px 8px 6px 8px;
height: 32px; height: 32px;
background: url(../images/skin/logo.gif) no-repeat; background: url(../images/skin/logo.gif) no-repeat;
background-position: left 0; background-position: left 0;
} }
#desktopTitlebar h1.applicationTitle { #desktopTitlebar h1.applicationTitle {
display: none; display: none;
margin: 0; margin: 0;
padding: 0 5px 0 0; padding: 0 5px 0 0;
font-size: 20px; font-size: 20px;
line-height: 25px; line-height: 25px;
font-weight: bold; font-weight: bold;
color: #fff; color: #fff;
} }
#desktopTitlebar h2.tagline { #desktopTitlebar h2.tagline {
padding: 7px 0 0 0; padding: 7px 0 0 0;
font-family: Verdana, Arial, Helvetica, sans-serif; font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px; font-size: 10px;
color: #d4dce4; color: #d4dce4;
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
text-transform: uppercase; text-transform: uppercase;
} }
#desktopTitlebar h2.tagline .taglineEm { #desktopTitlebar h2.tagline .taglineEm {
color: #fff; color: #fff;
font-weight: bold; font-weight: bold;
} }
#topNav { #topNav {
font-family: Verdana, Arial, Helvetica, sans-serif; font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px; font-size: 10px;
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
color: #d4dce4; color: #d4dce4;
text-align: right; text-align: right;
padding: 13px 10px 0 0; padding: 13px 10px 0 0;
} }
#topNav a { #topNav a {
color: #fff; color: #fff;
font-weight: normal; font-weight: normal;
} }
#topNav a:hover { #topNav a:hover {
text-decoration: none; text-decoration: none;
} }
/* Navbar */ /* Navbar */
#desktopNavbar { #desktopNavbar {
background: #f2f2f2; background: #f2f2f2;
/*height: 30px;*/ /*height: 30px;*/
margin: 0 0px; margin: 0 0px;
overflow: hidden; /* Remove this line if you want the menu to be backward compatible with Firefox 2 */ overflow: hidden; /* Remove this line if you want the menu to be backward compatible with Firefox 2 */
/* Fixes by Chris */ /* Fixes by Chris */
/*background-color: #ccc;*/ /*background-color: #ccc;*/
height: 20px; height: 20px;
border-bottom: 1px solid #3f3f3f; border-bottom: 1px solid #3f3f3f;
} }
#desktopNavbar ul { #desktopNavbar ul {
padding: 0; padding: 0;
margin: 0; margin: 0;
list-style: none; list-style: none;
font-size: 12px; font-size: 12px;
} }
#desktopNavbar>ul>li { #desktopNavbar>ul>li {
float: left; float: left;
} }
#desktopNavbar a { #desktopNavbar a {
display: block; display: block;
} }
#desktopNavbar ul li a { #desktopNavbar ul li a {
/*padding: 6px 10px 6px 10px;*/ /*padding: 6px 10px 6px 10px;*/
color: #333; color: #333;
font-weight: normal; font-weight: normal;
/* Fix by Chris */ /* Fix by Chris */
padding: 2px 10px 6px 10px; padding: 2px 10px 6px 10px;
} }
#desktopNavbar ul li a:hover { #desktopNavbar ul li a:hover {
color: #333; color: #333;
/* Fix By Chris */ /* Fix By Chris */
background-color: #fff; background-color: #fff;
} }
#desktopNavbar ul li a.arrow-right, #desktopNavbar ul li a:hover.arrow-right { #desktopNavbar ul li a.arrow-right, #desktopNavbar ul li a:hover.arrow-right {
background-image: url(../images/skin/arrow-right.gif); background-image: url(../images/skin/arrow-right.gif);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: right 7px; background-position: right 7px;
} }
#desktopNavbar li ul { #desktopNavbar li ul {
border: 1px solid #3f3f3f; border: 1px solid #3f3f3f;
background: #fff url(../images/skin/bg-dropdown.gif) repeat-y; background: #fff url(../images/skin/bg-dropdown.gif) repeat-y;
position: absolute; position: absolute;
left: -999em; left: -999em;
z-index: 8000; z-index: 8000;
/* Fix by Chris */ /* Fix by Chris */
margin-top: -6px; margin-top: -6px;
} }
#desktopNavbar li:hover ul ul, #desktopNavbar li:hover ul ul,
#desktopNavbar li.ieHover ul ul, #desktopNavbar li.ieHover ul ul,
#desktopNavbar li:hover ul ul ul, #desktopNavbar li:hover ul ul ul,
#desktopNavbar li.ieHover ul ul ul { #desktopNavbar li.ieHover ul ul ul {
left: -999em; left: -999em;
} }
#desktopNavbar li ul ul { /* third-and-above-level lists */ #desktopNavbar li ul ul { /* third-and-above-level lists */
margin: -22px 0 0 163px; margin: -22px 0 0 163px;
} }
#desktopNavbar li ul li .check { #desktopNavbar li ul li .check {
position: absolute; position: absolute;
top: 8px; top: 8px;
left: 6px; left: 6px;
width: 5px; width: 5px;
height: 5px; height: 5px;
background: #555; background: #555;
overflow: hidden; overflow: hidden;
line-height: 1px; line-height: 1px;
font-size: 1px; font-size: 1px;
} }
#desktopNavbar li ul li a { #desktopNavbar li ul li a {
position: relative; position: relative;
/*padding: 1px 9px 1px 25px;*/ /*padding: 1px 9px 1px 25px;*/
min-width: 120px; min-width: 120px;
color: #3f3f3f; color: #3f3f3f;
font-weight: normal; font-weight: normal;
/* Fix By Chris */ /* Fix By Chris */
padding: 1px 10px 1px 20px; /* Reduce left padding */ padding: 1px 10px 1px 20px;
/* Reduce left padding */
} }
#desktopNavbar li ul li a:hover { #desktopNavbar li ul li a:hover {
background: #6C98D9; background: #6C98D9;
color: #fff; color: #fff;
-moz-border-radius: 2px; -moz-border-radius: 2px;
} }
#desktopNavbar li ul li a:hover .check { #desktopNavbar li ul li a:hover .check {
background: #fff; background: #fff;
} }
#desktopNavbar li:hover ul, #desktopNavbar li:hover ul,
@ -204,45 +205,45 @@ body {
#desktopNavbar li li.ieHover ul, #desktopNavbar li li.ieHover ul,
#desktopNavbar li li li.ieHover ul, #desktopNavbar li li li.ieHover ul,
#desktopNavbar li li:hover ul, #desktopNavbar li li:hover ul,
#desktopNavbar li li li:hover ul { /* lists nested under hovered list items */ #desktopNavbar li li li:hover ul { /* lists nested under hovered list items */
left: auto; left: auto;
} }
#desktopNavbar li:hover { /* For IE7 */ #desktopNavbar li:hover { /* For IE7 */
position: static; position: static;
} }
li.divider { li.divider {
margin-top: 2px; margin-top: 2px;
padding-top: 3px; padding-top: 3px;
border-top: 1px solid #ebebeb; border-top: 1px solid #ebebeb;
} }
#pageWrapper { #pageWrapper {
position: relative; position: relative;
overflow: hidden; /* This can be set to hidden or auto */ overflow: hidden; /* This can be set to hidden or auto */
border-top: 1px solid #909090; border-top: 1px solid #909090;
border-bottom: 1px solid #909090; border-bottom: 1px solid #909090;
/*height: 100%;*/ /*height: 100%;*/
} }
/* Footer */ /* Footer */
#desktopFooterWrapper { #desktopFooterWrapper {
position: absolute; position: absolute;
left: 0; left: 0;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
height: 30px; height: 30px;
overflow: hidden; overflow: hidden;
} }
#desktopFooter { #desktopFooter {
font-family: Verdana, Arial, Helvetica, sans-serif; font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px; font-size: 11px;
height: 24px; height: 24px;
padding: 6px 8px 0 8px; padding: 6px 8px 0 8px;
background: #f2f2f2; background: #f2f2f2;
} }
@ -253,159 +254,159 @@ li.divider {
/* Columns */ /* Columns */
.column { .column {
position: relative; position: relative;
float: left; float: left;
overflow: hidden; /* Required by IE6 */ overflow: hidden; /* Required by IE6 */
} }
/* Panels */ /* Panels */
.panel { .panel {
position: relative; position: relative;
overflow: auto; overflow: auto;
background: #f8f8f8; background: #f8f8f8;
border-bottom: 1px solid #b9b9b9; border-bottom: 1px solid #b9b9b9;
} }
.panelWrapper.collapsed .panel-header { .panelWrapper.collapsed .panel-header {
border-bottom: 0; border-bottom: 0;
} }
.panelAlt { .panelAlt {
background: #f2f2f2; background: #f2f2f2;
} }
.bottomPanel { .bottomPanel {
border-bottom: 0; border-bottom: 0;
} }
.pad { .pad {
padding: 8px; padding: 8px;
} }
#mainPanel { #mainPanel {
background: #fff; background: #fff;
} }
.panel-header { .panel-header {
position: relative; position: relative;
background: #f1f1f1 url(../images/skin/bg-panel-header.gif) repeat-x; background: #f1f1f1 url(../images/skin/bg-panel-header.gif) repeat-x;
height: 30px; height: 30px;
overflow: hidden; overflow: hidden;
border-bottom: 1px solid #d3d3d3; border-bottom: 1px solid #d3d3d3;
} }
.panel-headerContent { .panel-headerContent {
padding-top: 2px; padding-top: 2px;
} }
.panel-headerContent.tabs { .panel-headerContent.tabs {
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: left -68px; background-position: left -68px;
} }
.panel-header h2 { .panel-header h2 {
display: inline-block; display: inline-block;
font-size: 12px; font-size: 12px;
margin: 0; margin: 0;
padding: 3px 8px 0 8px; padding: 3px 8px 0 8px;
height: 22px; height: 22px;
overflow: hidden; overflow: hidden;
color: #333; color: #333;
} }
.panel-collapse { .panel-collapse {
background: url(../images/skin/collapse-expand.gif) left top no-repeat; background: url(../images/skin/collapse-expand.gif) left top no-repeat;
} }
.panel-expand { .panel-expand {
background: url(../images/skin/collapse-expand.gif) left -16px no-repeat; background: url(../images/skin/collapse-expand.gif) left -16px no-repeat;
} }
.icon16 { .icon16 {
margin: 4px 0 0 2px; margin: 4px 0 0 2px;
cursor: pointer; cursor: pointer;
} }
/* Column and Panel Handles */ /* Column and Panel Handles */
.horizontalHandle { .horizontalHandle {
height: 4px; height: 4px;
line-height: 1px; line-height: 1px;
font-size: 1px; font-size: 1px;
overflow: hidden; overflow: hidden;
background: #eee url(../images/skin/bg-handle-horizontal.gif) repeat-x; background: #eee url(../images/skin/bg-handle-horizontal.gif) repeat-x;
} }
.horizontalHandle.detached .handleIcon { .horizontalHandle.detached .handleIcon {
background: transparent; background: transparent;
} }
.horizontalHandle .handleIcon { .horizontalHandle .handleIcon {
margin: 0 auto; margin: 0 auto;
height: 4px; height: 4px;
line-height: 1px; line-height: 1px;
font-size: 1px; font-size: 1px;
overflow: hidden; overflow: hidden;
background: url(../images/skin/handle-icon-horizontal.gif) center center no-repeat; background: url(../images/skin/handle-icon-horizontal.gif) center center no-repeat;
} }
.columnHandle { .columnHandle {
min-height: 10px; min-height: 10px;
float: left; float: left;
width: 4px; width: 4px;
overflow: hidden; overflow: hidden;
background: #c3c3c3 url(../images/skin/handle-icon.gif) center center no-repeat; background: #c3c3c3 url(../images/skin/handle-icon.gif) center center no-repeat;
border: 1px solid #909090; border: 1px solid #909090;
border-top: 0; border-top: 0;
border-bottom: 0; border-bottom: 0;
} }
/* Toolboxes */ /* Toolboxes */
.toolbox { .toolbox {
float: right; float: right;
margin-top: 3px; margin-top: 3px;
padding: 0 5px; padding: 0 5px;
height: 24px; height: 24px;
overflow: hidden; overflow: hidden;
text-align: right; text-align: right;
} }
.panel-header-toolbox { .panel-header-toolbox {
} }
div.toolbox.divider { /* Have to specify div here for IE6's sake */ div.toolbox.divider { /* Have to specify div here for IE6's sake */
background: url(../images/skin/toolbox-divider.gif) repeat-y; background: url(../images/skin/toolbox-divider.gif) repeat-y;
padding-left: 8px; padding-left: 8px;
} }
.toolbox img.disabled { .toolbox img.disabled {
cursor: default; cursor: default;
} }
.iconWrapper { .iconWrapper {
display: inline-block; display: inline-block;
height: 22px; height: 22px;
min-width: 22px; min-width: 22px;
overflow: hidden; overflow: hidden;
border: 1px solid transparent; border: 1px solid transparent;
} }
* html .iconWrapper { * html .iconWrapper {
padding: 1px; padding: 1px;
border: 0; border: 0;
} }
.iconWrapper img { .iconWrapper img {
cursor: pointer; cursor: pointer;
margin: 0; margin: 0;
padding: 3px; padding: 3px;
} }
.iconWrapper:hover { .iconWrapper:hover {
border: 1px solid #a0a0a0; border: 1px solid #a0a0a0;
-moz-border-radius: 3px; -moz-border-radius: 3px;
} }
#spinnerWrapper { #spinnerWrapper {
@ -416,15 +417,15 @@ div.toolbox.divider { /* Have to specify div here for IE6's sake */
} }
#spinner { #spinner {
display: none; display: none;
background: url(../images/skin/spinner.gif) no-repeat; background: url(../images/skin/spinner.gif) no-repeat;
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
#desktopFooter td { #desktopFooter td {
vertical-align: top; vertical-align: top;
text-align: left; text-align: left;
} }
td.speedLabel { td.speedLabel {

60
src/webui/www/private/css/Tabs.css

@ -18,49 +18,49 @@ Required by:
/* Toolbar Tabs */ /* Toolbar Tabs */
.toolbarTabs { .toolbarTabs {
padding: 0 5px 2px 2px; padding: 0 5px 2px 2px;
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: left -70px; background-position: left -70px;
overflow: visible; overflow: visible;
} }
.tab-menu { .tab-menu {
padding-top: 1px; padding-top: 1px;
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
line-height: 16px; line-height: 16px;
font-size: 11px; font-size: 11px;
} }
.tab-menu li { .tab-menu li {
display: block; display: block;
float: left; float: left;
margin: 0 0 5px 0; margin: 0 0 5px 0;
cursor: pointer; cursor: pointer;
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: left -35px; background-position: left -35px;
} }
.tab-menu li.selected { .tab-menu li.selected {
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: left 0; background-position: left 0;
} }
.tab-menu li a { .tab-menu li a {
display: block; display: block;
margin-left: 8px; margin-left: 8px;
padding: 6px 15px 5px 9px; padding: 6px 15px 5px 9px;
text-align: center; text-align: center;
font-weight: normal; font-weight: normal;
color: #181818; color: #181818;
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: right -35px; background-position: right -35px;
} }
.tab-menu li.selected a { .tab-menu li.selected a {
color: #181818; color: #181818;
font-weight: bold; font-weight: bold;
background: url(../images/skin/tabs.gif) repeat-x; background: url(../images/skin/tabs.gif) repeat-x;
background-position: right 0; background-position: right 0;
} }

346
src/webui/www/private/css/Window.css

@ -19,18 +19,17 @@ Required by:
---------------------------------------------------------------- */ ---------------------------------------------------------------- */
.mocha { .mocha {
display: none; display: none;
overflow: hidden; overflow: hidden;
background-color: #e5e5e5; background-color: #e5e5e5;
} }
.mocha.isFocused { .mocha.isFocused {}
}
.mochaOverlay { .mochaOverlay {
position: absolute; /* This is also set in theme.js in order to make theme transitions smoother */ position: absolute; /* This is also set in theme.js in order to make theme transitions smoother */
top: 0; top: 0;
left: 0; left: 0;
} }
/* /*
@ -45,110 +44,110 @@ Required by:
*/ */
.mochaTitlebar { .mochaTitlebar {
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
background: url(../images/skin/spacer.gif?from=fafafa&to=e5e5e5); background: url(../images/skin/spacer.gif?from=fafafa&to=e5e5e5);
} }
.mochaTitlebar h3 { .mochaTitlebar h3 {
font-size: 12px; font-size: 12px;
line-height: 15px; line-height: 15px;
font-weight: bold; font-weight: bold;
margin: 0; margin: 0;
padding: 5px 10px 4px 12px; padding: 5px 10px 4px 12px;
color: #888; color: #888;
} }
.mocha.isFocused .mochaTitlebar h3 { .mocha.isFocused .mochaTitlebar h3 {
color: #181818; color: #181818;
} }
.mochaToolbarWrapper { .mochaToolbarWrapper {
width: 100%; /* For IE */ width: 100%; /* For IE */
position: relative; position: relative;
height: 29px; height: 29px;
background: #f1f1f1; background: #f1f1f1;
overflow: hidden; overflow: hidden;
border-top: 1px solid #d9d9d9; border-top: 1px solid #d9d9d9;
} }
div.mochaToolbarWrapper.bottom { div.mochaToolbarWrapper.bottom {
border: 0; border: 0;
border-bottom: 1px solid #d9d9d9; border-bottom: 1px solid #d9d9d9;
} }
.mochaToolbar { .mochaToolbar {
width: 100%; /* For IE */ width: 100%; /* For IE */
border-top: 1px solid #fff; border-top: 1px solid #fff;
} }
.mochaContentBorder { .mochaContentBorder {
border-top: 1px solid #dadada; border-top: 1px solid #dadada;
border-bottom: 1px solid #dadada; border-bottom: 1px solid #dadada;
} }
.mochaContentWrapper { /* Has a fixed height and scrollbars if required. */ .mochaContentWrapper { /* Has a fixed height and scrollbars if required. */
font-size: 12px; font-size: 12px;
overflow: auto; overflow: auto;
background: #fff; background: #fff;
} }
.mochaContent { .mochaContent {
padding: 10px 12px; padding: 10px 12px;
} }
.mocha .handle { .mocha .handle {
position: absolute; position: absolute;
background: #0f0; background: #0f0;
width: 3px; width: 3px;
height: 3px; height: 3px;
z-index: 2; z-index: 2;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/
opacity: .0; opacity: .0;
-moz-opacity: .0; -moz-opacity: .0;
overflow: hidden; overflow: hidden;
font-size: 1px; /* For IE6 */ font-size: 1px; /* For IE6 */
} }
.mocha .corner { /* Corner resize handles */ .mocha .corner { /* Corner resize handles */
width: 10px; width: 10px;
height: 10px; height: 10px;
background: #f00; background: #f00;
} }
.mocha .cornerSE { /* Bottom right resize handle */ .mocha .cornerSE { /* Bottom right resize handle */
width: 20px; width: 20px;
height: 20px; height: 20px;
background: #fefefe; /* This is the color of the visible resize handle */ background: #fefefe; /* This is the color of the visible resize handle */
} }
.mochaCanvasHeader { .mochaCanvasHeader {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
background: transparent; background: transparent;
z-index: -1; z-index: -1;
visibility: hidden; visibility: hidden;
overflow: hidden; overflow: hidden;
} }
.mochaControls { .mochaControls {
position: absolute; position: absolute;
width: 52px; width: 52px;
top: 8px; top: 8px;
right: 8px; right: 8px;
height: 14px; height: 14px;
z-index: 4; z-index: 4;
background: transparent; background: transparent;
} }
.mochaCanvasControls { .mochaCanvasControls {
position: absolute; position: absolute;
top: 8px; top: 8px;
right: 8px; right: 8px;
z-index: 3; z-index: 3;
background: transparent; background: transparent;
} }
/* /*
@ -160,19 +159,19 @@ div.mochaToolbarWrapper.bottom {
*/ */
.mochaMinimizeButton, .mochaMaximizeButton, .mochaCloseButton { .mochaMinimizeButton, .mochaMaximizeButton, .mochaCloseButton {
float: right; float: right;
width: 14px; width: 14px;
height: 14px; height: 14px;
font-size: 1px; font-size: 1px;
cursor: pointer; cursor: pointer;
z-index: 4; z-index: 4;
color: #666; color: #666;
background-color: #fff; background-color: #fff;
margin-left: 5px; margin-left: 5px;
} }
.mochaMinimizeButton { .mochaMinimizeButton {
margin-left: 0; margin-left: 0;
} }
.mochaMaximizeButton { .mochaMaximizeButton {
@ -181,200 +180,203 @@ div.mochaToolbarWrapper.bottom {
.mochaCloseButton { .mochaCloseButton {
} }
.mochaSpinner{ .mochaSpinner {
display: none; display: none;
position: absolute; position: absolute;
bottom: 7px; bottom: 7px;
left: 6px; left: 6px;
width: 16px; width: 16px;
height: 16px; height: 16px;
background: url(../images/skin/spinner.gif) no-repeat; background: url(../images/skin/spinner.gif) no-repeat;
} }
.mochaIframe { .mochaIframe {
width: 100%; width: 100%;
} }
/* Fix for IE6 select z-index issue */ /* Fix for IE6 select z-index issue */
.zIndexFix { .zIndexFix {
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
z-index: -1; z-index: -1;
filter: mask(); filter: mask();
width: 100px; width: 100px;
height: 100px; height: 100px;
border: 1px solid transparent; border: 1px solid transparent;
} }
/* Viewport overlays /* Viewport overlays
---------------------------------------------------------------- */ ---------------------------------------------------------------- */
#modalOverlay { #modalOverlay {
display: none; display: none;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
background: #000; background: #000;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/
opacity: 0; opacity: 0;
-moz-opacity: 0; -moz-opacity: 0;
z-index: 10000; z-index: 10000;
} }
/* Fix for IE6 select z-index issue */ /* Fix for IE6 select z-index issue */
#modalFix { #modalFix {
display: none; display: none;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/
opacity: 0; opacity: 0;
-moz-opacity: 0; -moz-opacity: 0;
z-index: 9999; z-index: 9999;
} }
/* Underlay */ /* Underlay */
#windowUnderlay { #windowUnderlay {
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
background: #fff; background: #fff;
} }
* html #windowUnderlay { * html #windowUnderlay {
position: absolute; position: absolute;
} }
/* The replaced class is used internally when converting CSS values to Canvas. These classes should not be removed. */ /* The replaced class is used internally when converting CSS values to Canvas. These classes should not be removed. */
.mocha.replaced, .mochaTitlebar.replaced, .mochaMinimizeButton.replaced, .mochaMaximizeButton.replaced, .mochaCloseButton.replaced { .mocha.replaced, .mochaTitlebar.replaced, .mochaMinimizeButton.replaced,
background-color: transparent !important; .mochaMaximizeButton.replaced, .mochaCloseButton.replaced {
background-color: transparent !important;
} }
.windowClosed { .windowClosed {
visibility: hidden; visibility: hidden;
display: none; display: none;
position: absolute; position: absolute;
top: -20000px; top: -20000px;
left: -20000px; left: -20000px;
z-index: -1; z-index: -1;
overflow: hidden; overflow: hidden;
} }
.windowClosed .mochaContentBorder, .windowClosed .mochaToolbarWrapper, .windowClosed .mochaTitlebar, .windowClosed .mochaControls, .windowClosed .mochaContentBorder, .windowClosed .mochaToolbarWrapper,
.windowClosed .mochaTitlebar, .windowClosed .mochaControls,
.windowClosed .mochaCanvasControls { .windowClosed .mochaCanvasControls {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
visibility: hidden; visibility: hidden;
display: none; display: none;
z-index: -1; z-index: -1;
} }
/* Modals */ /* Modals */
.modal2 { .modal2 {
border: 8px solid #fff; border: 8px solid #fff;
} }
.modal2 .mochaContentBorder { .modal2 .mochaContentBorder {
border-width: 0px; border-width: 0px;
} }
/* Window Themes */ /* Window Themes */
.mocha.no-canvas { .mocha.no-canvas {
background: #e5e5e5; background: #e5e5e5;
border: 1px solid #555; border: 1px solid #555;
} }
.mocha.no-canvas .mochaTitlebar { .mocha.no-canvas .mochaTitlebar {
background: #e5e5e5; background: #e5e5e5;
} }
.mocha.transparent .mochaTitlebar h3 { .mocha.transparent .mochaTitlebar h3 {
color: #fff; color: #fff;
display: none; display: none;
} }
.mocha.transparent .mochaContentWrapper { .mocha.transparent .mochaContentWrapper {
background: transparent; background: transparent;
} }
.mocha.notification { .mocha.notification {
background: #cedff2; background: #cedff2;
} }
.mocha.notification .mochaTitlebar { .mocha.notification .mochaTitlebar {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/
opacity: .0; opacity: .0;
-moz-opacity: 0; -moz-opacity: 0;
} }
.mocha.notification .mochaContentBorder { .mocha.notification .mochaContentBorder {
border-width: 0px; border-width: 0px;
} }
.mocha.notification .mochaContentWrapper { .mocha.notification .mochaContentWrapper {
text-align: center; text-align: center;
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
background: transparent; background: transparent;
} }
/* Example Window Themes */ /* Example Window Themes */
#about_contentWrapper { #about_contentWrapper {
background: #e5e5e5 url(../images/skin/logo2.gif) 3px 3px no-repeat; background: #e5e5e5 url(../images/skin/logo2.gif) 3px 3px no-repeat;
} }
#builder_contentWrapper { #builder_contentWrapper {
background: #f5f5f7; background: #f5f5f7;
} }
#json01 .mochaTitlebar { #json01 .mochaTitlebar {
background: #6dd2db; background: #6dd2db;
} }
#json02 .mochaTitlebar { #json02 .mochaTitlebar {
background: #6db6db; background: #6db6db;
} }
#json03 .mochaTitlebar { #json03 .mochaTitlebar {
background: #6d92db; background: #6d92db;
} }
.jsonExample .mochaTitlebar h3 { .jsonExample .mochaTitlebar h3 {
color: #ddd; color: #ddd;
} }
/* This does not work in IE6. */ /* This does not work in IE6. */
.isFocused.jsonExample .mochaTitlebar h3 { .isFocused.jsonExample .mochaTitlebar h3 {
color: #fff; color: #fff;
} }
#fxmorpherExample .mochaContentWrapper { #fxmorpherExample .mochaContentWrapper {
background: #577a9e; background: #577a9e;
} }
#clock { #clock {
background: #fff; background: #fff;
} }
/* Workaround to make invisible buttons clickable */ /* Workaround to make invisible buttons clickable */
.mochaMinimizeButton.replaced, .mochaMinimizeButton.replaced,
.mochaMaximizeButton.replaced, .mochaMaximizeButton.replaced,
.mochaCloseButton.replaced { .mochaCloseButton.replaced {
background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important; background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important;
} }
/* iOS iframe scrolling */ /* iOS iframe scrolling */

11
src/webui/www/private/css/dynamicTable.css

@ -1,11 +1,10 @@
/************************************************************** /**************************************************************
Dynamic Table Dynamic Table
v 0.4 v 0.4
**************************************************************/ **************************************************************/
.dynamicTable tbody tr { .dynamicTable tbody tr {
background-color: #fff; background-color: #fff;
} }
@ -34,8 +33,8 @@
} }
#transferList img.stateIcon { #transferList img.stateIcon {
height: 1.3em; height: 1.3em;
vertical-align: middle; vertical-align: middle;
margin-bottom: -1px; margin-bottom: -1px;
} }
@ -45,7 +44,7 @@ tr.dynamicTableHeader {
.dynamicTable { .dynamicTable {
table-layout: fixed; table-layout: fixed;
width :1%; width: 1%;
padding: 0; padding: 0;
border-spacing: 0; border-spacing: 0;
} }
@ -63,7 +62,7 @@ tr.dynamicTableHeader {
} }
.dynamicTable td { .dynamicTable td {
padding:0px 4px; padding: 0px 4px;
white-space: nowrap; white-space: nowrap;
} }

79
src/webui/www/private/css/style.css

@ -1,9 +1,16 @@
/* Reset */ /* Reset */
/*ul,ol,dl,li,dt,dd,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input,object,iframe { margin: 0; padding: 0; }*/ /*ul,ol,dl,li,dt,dd,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input,object,iframe { margin: 0; padding: 0; }*/
a img,:link img,:visited img { border: none; }
a img, :link img, :visited img {
border: none;
}
/*table { border-collapse: collapse; border-spacing: 0; }*/ /*table { border-collapse: collapse; border-spacing: 0; }*/
:focus { outline: none; }
:focus {
outline: none;
}
/* Structure */ /* Structure */
@ -100,7 +107,7 @@ pre {
margin: 0 0 10px 0; margin: 0 0 10px 0;
padding: 10px; padding: 10px;
border: 1px solid #d1d7dc; border: 1px solid #d1d7dc;
} }
/* Dividers */ /* Dividers */
@ -116,13 +123,13 @@ hr {
} }
#urls { #urls {
width:90%; width: 90%;
height:100%; height: 100%;
} }
#trackersUrls { #trackersUrls {
width:90%; width: 90%;
height:100%; height: 100%;
} }
#Filters ul { #Filters ul {
@ -172,45 +179,75 @@ a.propButton img {
/* context menu specific */ /* context menu specific */
.contextMenu { border:1px solid #999; padding:0; background:#eee; list-style-type:none; display:none;} .contextMenu {
.contextMenu .separator { border-top:1px solid #999; } border: 1px solid #999;
.contextMenu li { margin:0; padding:0;} padding: 0;
background: #eee;
list-style-type: none;
display: none;
}
.contextMenu .separator {
border-top: 1px solid #999;
}
.contextMenu li {
margin: 0;
padding: 0;
}
.contextMenu li a { .contextMenu li a {
display: block; display: block;
padding: 5px 20px 5px 5px; padding: 5px 20px 5px 5px;
font-size: 12px; font-size: 12px;
text-decoration: none; text-decoration: none;
font-family: tahoma,arial,sans-serif; font-family: tahoma, arial, sans-serif;
color: #000; color: #000;
white-space: nowrap; white-space: nowrap;
} }
.contextMenu li a:hover { background-color:#ddd; }
.contextMenu li a.disabled { color:#ccc; font-style:italic; } .contextMenu li a:hover {
.contextMenu li a.disabled:hover { background-color:#eee; } background-color: #ddd;
}
.contextMenu li a.disabled {
color: #ccc;
font-style: italic;
}
.contextMenu li a.disabled:hover {
background-color: #eee;
}
.contextMenu li ul { .contextMenu li ul {
padding: 0; padding: 0;
border:1px solid #999; padding:0; background:#eee; border: 1px solid #999;
list-style-type:none; padding: 0;
background: #eee;
list-style-type: none;
position: absolute; position: absolute;
left: -999em; left: -999em;
z-index: 8000; z-index: 8000;
margin: -29px 0 0 100%; margin: -29px 0 0 100%;
width: 164px; width: 164px;
} }
.contextMenu li ul li a { .contextMenu li ul li a {
position: relative; position: relative;
} }
.contextMenu li a.arrow-right, .contextMenu li a:hover.arrow-right { .contextMenu li a.arrow-right, .contextMenu li a:hover.arrow-right {
background-image: url(../images/skin/arrow-right.gif); background-image: url(../images/skin/arrow-right.gif);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: right center; background-position: right center;
} }
.contextMenu li:hover ul, .contextMenu li:hover ul,
.contextMenu li.ieHover ul, .contextMenu li.ieHover ul,
.contextMenu li li.ieHover ul, .contextMenu li li.ieHover ul,
.contextMenu li li li.ieHover ul, .contextMenu li li li.ieHover ul,
.contextMenu li li:hover ul, .contextMenu li li:hover ul,
.contextMenu li li li:hover ul { /* lists nested under hovered list items */ .contextMenu li li li:hover ul { /* lists nested under hovered list items */
left: auto; left: auto;
} }
@ -218,7 +255,7 @@ a.propButton img {
width: 16px; width: 16px;
height: 16px; height: 16px;
margin-bottom: -4px; margin-bottom: -4px;
-ms-interpolation-mode : bicubic; -ms-interpolation-mode: bicubic;
} }
/* Sliders */ /* Sliders */
@ -280,6 +317,7 @@ a.propButton img {
} }
/* Mocha Customization */ /* Mocha Customization */
#mochaToolbar { #mochaToolbar {
margin-top: 5px; margin-top: 5px;
} }
@ -392,7 +430,8 @@ td.generalLabel {
line-height: 20px; line-height: 20px;
} }
#trackersTable, #webseedsTable { #trackersTable,
#webseedsTable {
line-height: 25px; line-height: 25px;
} }
@ -425,7 +464,7 @@ td.generalLabel {
} }
.select-watched-folder-editable { .select-watched-folder-editable {
position:relative; position: relative;
background-color: white; background-color: white;
border: solid grey 1px; border: solid grey 1px;
width: 160px; width: 160px;

152
src/webui/www/private/download.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Add Torrent Links)QBT_TR[CONTEXT=downloadFromURL]</title> <title>QBT_TR(Add Torrent Links)QBT_TR[CONTEXT=downloadFromURL]</title>
@ -8,84 +9,85 @@
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> <script src="scripts/lib/mootools-1.2-core-yc.js"></script>
<script src="scripts/download.js"></script> <script src="scripts/download.js"></script>
</head> </head>
<body>
<iframe id="download_frame" name="download_frame" class="invisible" src="javascript:false;"></iframe>
<form action="api/v2/torrents/add" enctype="multipart/form-data" method="post" id="downloadForm" style="text-align: center;" target="download_frame">
<div style="text-align: center;">
<br/>
<h2 class="vcenter">QBT_TR(Download Torrents from their URLs or Magnet links)QBT_TR[CONTEXT=HttpServer]</h2>
<textarea id="urls" rows="10" name="urls"></textarea>
<p>QBT_TR(Only one link per line)QBT_TR[CONTEXT=HttpServer]</p>
<fieldset class="settings" style="border: 0; text-align: left;">
<div class="formRow" style="margin-top: 6px;">
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="savepath" name="savepath" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="cookie" class="leftLabelLarge">QBT_TR(Cookie:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="cookie" name="cookie" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="rename" name="rename" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="start_torrent" class="leftLabelLarge">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="start_torrent" checked="checked"/>
<input type="hidden" id="add_paused" name="paused" value="true" disabled="disabled"/>
</div>
<div class="formRow">
<label for="skip_checking" class="leftLabelLarge">QBT_TR(Skip hash check)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="skip_checking" name="skip_checking" value="true"/>
</div>
<div class="formRow">
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="root_folder" name="root_folder" value="true" checked="checked"/>
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="sequentialDownload" name="sequentialDownload" value="true"/>
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="firstLastPiecePrio" name="firstLastPiecePrio" value="true"/>
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="dlLimit" name="dlLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="upLimit" name="upLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div id="submitbutton" style="margin-top: 12px; text-align: center;">
<button type="submit" id="submitButton">QBT_TR(Download)QBT_TR[CONTEXT=downloadFromURL]</button>
</div>
</fieldset>
</div>
</form>
<script>
var submitted = false; <body>
<iframe id="download_frame" name="download_frame" class="invisible" src="javascript:false;"></iframe>
<form action="api/v2/torrents/add" enctype="multipart/form-data" method="post" id="downloadForm" style="text-align: center;" target="download_frame">
<div style="text-align: center;">
<br/>
<h2 class="vcenter">QBT_TR(Download Torrents from their URLs or Magnet links)QBT_TR[CONTEXT=HttpServer]</h2>
<textarea id="urls" rows="10" name="urls"></textarea>
<p>QBT_TR(Only one link per line)QBT_TR[CONTEXT=HttpServer]</p>
<fieldset class="settings" style="border: 0; text-align: left;">
<div class="formRow" style="margin-top: 6px;">
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="savepath" name="savepath" style="width: 16em;" />
</div>
<div class="formRow">
<label for="cookie" class="leftLabelLarge">QBT_TR(Cookie:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="cookie" name="cookie" style="width: 16em;" />
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="rename" name="rename" style="width: 16em;" />
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category" style="width: 16em;" />
</div>
<div class="formRow">
<label for="start_torrent" class="leftLabelLarge">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="start_torrent" checked="checked" />
<input type="hidden" id="add_paused" name="paused" value="true" disabled="disabled" />
</div>
<div class="formRow">
<label for="skip_checking" class="leftLabelLarge">QBT_TR(Skip hash check)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="skip_checking" name="skip_checking" value="true" />
</div>
<div class="formRow">
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="root_folder" name="root_folder" value="true" checked="checked" />
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="sequentialDownload" name="sequentialDownload" value="true" />
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="firstLastPiecePrio" name="firstLastPiecePrio" value="true" />
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="dlLimit" name="dlLimit" style="width: 16em;" placeholder="Bytes/s" />
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="upLimit" name="upLimit" style="width: 16em;" placeholder="Bytes/s" />
</div>
<div id="submitbutton" style="margin-top: 12px; text-align: center;">
<button type="submit" id="submitButton">QBT_TR(Download)QBT_TR[CONTEXT=downloadFromURL]</button>
</div>
</fieldset>
</div>
</form>
<script>
var submitted = false;
$('downloadForm').addEventListener("submit", function() { $('downloadForm').addEventListener("submit", function() {
$('download_spinner').style.display = "block"; $('download_spinner').style.display = "block";
submitted = true; submitted = true;
}); });
$('download_frame').addEventListener("load", function() { $('download_frame').addEventListener("load", function() {
if (submitted) if (submitted)
window.parent.closeWindows(); window.parent.closeWindows();
}); });
$('start_torrent').addEventListener('change', function() { $('start_torrent').addEventListener('change', function() {
$('add_paused').disabled = $('start_torrent').checked; $('add_paused').disabled = $('start_torrent').checked;
}); });
</script> </script>
<div id="download_spinner" class="mochaSpinner"></div> <div id="download_spinner" class="mochaSpinner"></div>
</body> </body>
</html> </html>

91
src/webui/www/private/downloadlimit.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Torrent Download Speed Limiting)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(Torrent Download Speed Limiting)QBT_TR[CONTEXT=TransferListWidget]</title>
@ -9,54 +10,56 @@
<script src="scripts/lib/mocha-yc.js"></script> <script src="scripts/lib/mocha-yc.js"></script>
<script src="scripts/lib/parametrics.js"></script> <script src="scripts/lib/parametrics.js"></script>
</head> </head>
<body> <body>
<div style="width: 100%; text-align: center; margin: 0 auto; overflow: hidden"> <div style="width: 100%; text-align: center; margin: 0 auto; overflow: hidden">
<div id="dllimitSlider" class="slider"> <div id="dllimitSlider" class="slider">
<div id="dllimitUpdate" class="update">QBT_TR(Download limit:)QBT_TR[CONTEXT=PropertiesWidget] <input id="dllimitUpdatevalue" size="6" placeholder="∞" style="text-align: center;"> <span id="dlLimitUnit">QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]</span></div> <div id="dllimitUpdate" class="update">QBT_TR(Download limit:)QBT_TR[CONTEXT=PropertiesWidget] <input id="dllimitUpdatevalue" size="6" placeholder="∞" style="text-align: center;"> <span id="dlLimitUnit">QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]</span></div>
<div class="sliderWrapper"> <div class="sliderWrapper">
<div id="dllimitSliderknob" class="sliderknob"></div> <div id="dllimitSliderknob" class="sliderknob"></div>
<div id="dllimitSliderarea" class="sliderarea"></div> <div id="dllimitSliderarea" class="sliderarea"></div>
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<script> <script>
var hashes = new URI().getData('hashes').split('|'); var hashes = new URI().getData('hashes').split('|');
setDlLimit = function() { setDlLimit = function() {
var limit = $("dllimitUpdatevalue").value.toInt() * 1024; var limit = $("dllimitUpdatevalue").value.toInt() * 1024;
if (hashes[0] == "global") { if (hashes[0] == "global") {
new Request({ new Request({
url: 'api/v2/transfer/setDownloadLimit', url: 'api/v2/transfer/setDownloadLimit',
method: 'post', method: 'post',
data: { data: {
'limit': limit 'limit': limit
}, },
onComplete: function() { onComplete: function() {
window.parent.updateMainData(); window.parent.updateMainData();
window.parent.closeWindows(); window.parent.closeWindows();
}
}).send();
} }
}).send(); else {
} new Request({
else { url: 'api/v2/torrents/setDownloadLimit',
new Request({ method: 'post',
url: 'api/v2/torrents/setDownloadLimit', data: {
method: 'post', 'hashes': hashes.join('|'),
data: { 'limit': limit
'hashes': hashes.join('|'), },
'limit': limit onComplete: function() {
}, window.parent.closeWindows();
onComplete: function() { }
window.parent.closeWindows(); }).send();
} }
}).send(); }
} </script>
} <input type="button" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="setDlLimit()" />
</script> </div>
<input type="button" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="setDlLimit()"/>
</div>
<script> <script>
MochaUI.addDlLimitSlider(hashes); MochaUI.addDlLimitSlider(hashes);
</script> </script>
</body> </body>
</html> </html>

26
src/webui/www/private/filters.html

@ -17,33 +17,33 @@
<script> <script>
var categoriesFilterContextMenu = new CategoriesFilterContextMenu({ var categoriesFilterContextMenu = new CategoriesFilterContextMenu({
targets : '.categoriesFilterContextMenuTarget', targets: '.categoriesFilterContextMenuTarget',
menu : 'categoriesFilterMenu', menu: 'categoriesFilterMenu',
actions : { actions: {
CreateCategory : function (element, ref) { CreateCategory: function(element, ref) {
createCategoryFN(); createCategoryFN();
}, },
DeleteCategory : function (element, ref) { DeleteCategory: function(element, ref) {
removeCategoryFN(element.id); removeCategoryFN(element.id);
}, },
DeleteUnusedCategories : function (element, ref) { DeleteUnusedCategories: function(element, ref) {
deleteUnusedCategoriesFN(); deleteUnusedCategoriesFN();
}, },
StartTorrentsByCategory : function (element, ref) { StartTorrentsByCategory: function(element, ref) {
startTorrentsByCategoryFN(element.id); startTorrentsByCategoryFN(element.id);
}, },
PauseTorrentsByCategory : function (element, ref) { PauseTorrentsByCategory: function(element, ref) {
pauseTorrentsByCategoryFN(element.id); pauseTorrentsByCategoryFN(element.id);
}, },
DeleteTorrentsByCategory : function (element, ref) { DeleteTorrentsByCategory: function(element, ref) {
deleteTorrentsByCategoryFN(element.id); deleteTorrentsByCategoryFN(element.id);
} }
}, },
offsets : { offsets: {
x : -15, x: -15,
y : 2 y: 2
}, },
onShow: function () { onShow: function() {
this.options.element.firstChild.click(); this.options.element.firstChild.click();
} }
}); });

13
src/webui/www/private/index.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=10" /> <meta http-equiv="X-UA-Compatible" content="IE=10" />
@ -26,6 +27,7 @@
<script src="scripts/client.js"></script> <script src="scripts/client.js"></script>
<script src="scripts/contextmenu.js"></script> <script src="scripts/contextmenu.js"></script>
</head> </head>
<body> <body>
<div id="desktop"> <div id="desktop">
<div id="desktopHeader"> <div id="desktopHeader">
@ -61,10 +63,10 @@
<li> <li>
<a class="returnFalse">QBT_TR(&View)QBT_TR[CONTEXT=MainWindow]</a> <a class="returnFalse">QBT_TR(&View)QBT_TR[CONTEXT=MainWindow]</a>
<ul> <ul>
<li><a id="showTopToolbarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(&Top Toolbar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Top Toolbar)QBT_TR[CONTEXT=MainWindow]</a></li> <li><a id="showTopToolbarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(&Top Toolbar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Top Toolbar)QBT_TR[CONTEXT=MainWindow]</a></li>
<li><a id="showStatusBarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(&Status Bar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Status Bar)QBT_TR[CONTEXT=MainWindow]</a></li> <li><a id="showStatusBarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(&Status Bar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Status Bar)QBT_TR[CONTEXT=MainWindow]</a></li>
<li><a id="speedInBrowserTitleBarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(S&peed in Title Bar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(S&peed in Title Bar)QBT_TR[CONTEXT=MainWindow]</a></li> <li><a id="speedInBrowserTitleBarLink"><img class="MyMenuIcon" src="theme/checked" alt="QBT_TR(S&peed in Title Bar)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(S&peed in Title Bar)QBT_TR[CONTEXT=MainWindow]</a></li>
<li class="divider"><a id=StatisticsLink ><img class="MyMenuIcon" src="theme/view-statistics" alt="QBT_TR(&Statistics)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Statistics)QBT_TR[CONTEXT=MainWindow]</a></li> <li class="divider"><a id=StatisticsLink><img class="MyMenuIcon" src="theme/view-statistics" alt="QBT_TR(&Statistics)QBT_TR[CONTEXT=MainWindow]" width="16" height="16" onload="fixPNG(this)"/>QBT_TR(&Statistics)QBT_TR[CONTEXT=MainWindow]</a></li>
</ul> </ul>
</li> </li>
<li> <li>
@ -152,7 +154,7 @@
<tr> <tr>
<td id="DHTNodes"></td> <td id="DHTNodes"></td>
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
<td><img id="connectionStatus" alt="Connection Status" src="images/skin/firewalled.png" style="height: 1.5em;"/></td> <td><img id="connectionStatus" alt="Connection Status" src="images/skin/firewalled.png" style="height: 1.5em;" /></td>
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
<td style="cursor:pointer;"><img id="alternativeSpeedLimits" alt="QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]" src="images/slow_off.png" /></td> <td style="cursor:pointer;"><img id="alternativeSpeedLimits" alt="QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]" src="images/slow_off.png" /></td>
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
@ -164,4 +166,5 @@
</div> </div>
</div> </div>
</body> </body>
</html> </html>

16
src/webui/www/private/newcategory.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(New Category)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(New Category)QBT_TR[CONTEXT=TransferListWidget]</title>
@ -10,7 +11,7 @@
var newCategoryKeyboardEvents = new Keyboard({ var newCategoryKeyboardEvents = new Keyboard({
defaultEventType: 'keydown', defaultEventType: 'keydown',
events: { events: {
'enter': function (event) { 'enter': function(event) {
$('newCategoryButton').click(); $('newCategoryButton').click();
event.preventDefault(); event.preventDefault();
} }
@ -38,13 +39,12 @@
data: { data: {
category: categoryName category: categoryName
}, },
onComplete: function () { onComplete: function() {
window.parent.closeWindows(); window.parent.closeWindows();
} }
}).send(); }).send();
} }
else else {
{
new Request({ new Request({
url: 'api/v2/torrents/setCategory', url: 'api/v2/torrents/setCategory',
method: 'post', method: 'post',
@ -52,7 +52,7 @@
hashes: hashesList, hashes: hashesList,
category: categoryName category: categoryName
}, },
onComplete: function () { onComplete: function() {
window.parent.closeWindows(); window.parent.closeWindows();
} }
}).send(); }).send();
@ -61,13 +61,15 @@
}); });
</script> </script>
</head> </head>
<body> <body>
<div style="padding: 10px 10px 0px 10px;"> <div style="padding: 10px 10px 0px 10px;">
<p style="font-weight: bold;">QBT_TR(Category)QBT_TR[CONTEXT=TransferListWidget]:</p> <p style="font-weight: bold;">QBT_TR(Category)QBT_TR[CONTEXT=TransferListWidget]:</p>
<input type="text" id="newCategory" value="" maxlength="100" style="width: 220px;"/> <input type="text" id="newCategory" value="" maxlength="100" style="width: 220px;" />
<div style="text-align: center; padding-top: 10px;"> <div style="text-align: center; padding-top: 10px;">
<input type="button" value="QBT_TR(Add)QBT_TR[CONTEXT=HttpServer]" id="newCategoryButton"/> <input type="button" value="QBT_TR(Add)QBT_TR[CONTEXT=HttpServer]" id="newCategoryButton" />
</div> </div>
</div> </div>
</body> </body>
</html> </html>

73
src/webui/www/private/preferences.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Download from URLs)QBT_TR[CONTEXT=downloadFromURL]</title> <title>QBT_TR(Download from URLs)QBT_TR[CONTEXT=downloadFromURL]</title>
@ -9,43 +10,45 @@
<script src="scripts/lib/mootools-1.2-more.js"></script> <script src="scripts/lib/mootools-1.2-more.js"></script>
<script src="scripts/lib/mocha-yc.js"></script> <script src="scripts/lib/mocha-yc.js"></script>
</head> </head>
<body style="padding: 5px;"> <body style="padding: 5px;">
<!-- preferences --> <!-- preferences -->
<div class="toolbarTabs"> <div class="toolbarTabs">
<ul id="preferencesTabs" class="tab-menu"> <ul id="preferencesTabs" class="tab-menu">
<li id="PrefDownloadsLink" class="selected"><a>QBT_TR(Downloads)QBT_TR[CONTEXT=OptionsDialog]</a></li> <li id="PrefDownloadsLink" class="selected"><a>QBT_TR(Downloads)QBT_TR[CONTEXT=OptionsDialog]</a></li>
<li id="PrefConnectionLink"><a>QBT_TR(Connection)QBT_TR[CONTEXT=OptionsDialog]</a></li> <li id="PrefConnectionLink"><a>QBT_TR(Connection)QBT_TR[CONTEXT=OptionsDialog]</a></li>
<li id="PrefSpeedLink"><a>QBT_TR(Speed)QBT_TR[CONTEXT=OptionsDialog]</a></li> <li id="PrefSpeedLink"><a>QBT_TR(Speed)QBT_TR[CONTEXT=OptionsDialog]</a></li>
<li id="PrefBittorrentLink"><a>QBT_TR(BitTorrent)QBT_TR[CONTEXT=OptionsDialog]</a></li> <li id="PrefBittorrentLink"><a>QBT_TR(BitTorrent)QBT_TR[CONTEXT=OptionsDialog]</a></li>
<li id="PrefWebUILink"><a>QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</a></li> <li id="PrefWebUILink"><a>QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</a></li>
</ul> </ul>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<script> <script>
// Tabs // Tabs
MochaUI.initializeTabs('preferencesTabs'); MochaUI.initializeTabs('preferencesTabs');
$('PrefDownloadsLink').addEvent('click', function(e) { $('PrefDownloadsLink').addEvent('click', function(e) {
$$('.PrefTab').addClass('invisible'); $$('.PrefTab').addClass('invisible');
$('DownloadsTab').removeClass('invisible'); $('DownloadsTab').removeClass('invisible');
}); });
$('PrefConnectionLink').addEvent('click', function(e){ $('PrefConnectionLink').addEvent('click', function(e) {
$$('.PrefTab').addClass('invisible'); $$('.PrefTab').addClass('invisible');
$('ConnectionTab').removeClass('invisible'); $('ConnectionTab').removeClass('invisible');
}); });
$('PrefSpeedLink').addEvent('click', function(e) { $('PrefSpeedLink').addEvent('click', function(e) {
$$('.PrefTab').addClass('invisible'); $$('.PrefTab').addClass('invisible');
$('SpeedTab').removeClass('invisible'); $('SpeedTab').removeClass('invisible');
}); });
$('PrefBittorrentLink').addEvent('click', function(e) { $('PrefBittorrentLink').addEvent('click', function(e) {
$$('.PrefTab').addClass('invisible'); $$('.PrefTab').addClass('invisible');
$('BittorrentTab').removeClass('invisible'); $('BittorrentTab').removeClass('invisible');
}); });
$('PrefWebUILink').addEvent('click', function(e) { $('PrefWebUILink').addEvent('click', function(e) {
$$('.PrefTab').addClass('invisible'); $$('.PrefTab').addClass('invisible');
$('WebUITab').removeClass('invisible'); $('WebUITab').removeClass('invisible');
}); });
</script> </script>
</body> </body>
</html> </html>

2264
src/webui/www/private/preferences_content.html

File diff suppressed because it is too large Load Diff

16
src/webui/www/private/properties.html

@ -1,10 +1,10 @@
<div class="toolbarTabs"> <div class="toolbarTabs">
<ul id="propertiesTabs" class="tab-menu"> <ul id="propertiesTabs" class="tab-menu">
<li id="PropGeneralLink" class="selected"><a>QBT_TR(General)QBT_TR[CONTEXT=PropTabBar]</a></li> <li id="PropGeneralLink" class="selected"><a>QBT_TR(General)QBT_TR[CONTEXT=PropTabBar]</a></li>
<li id="PropTrackersLink"><a>QBT_TR(Trackers)QBT_TR[CONTEXT=PropTabBar]</a></li> <li id="PropTrackersLink"><a>QBT_TR(Trackers)QBT_TR[CONTEXT=PropTabBar]</a></li>
<li id="PropPeersLink"><a>QBT_TR(Peers)QBT_TR[CONTEXT=PropTabBar]</a></li> <li id="PropPeersLink"><a>QBT_TR(Peers)QBT_TR[CONTEXT=PropTabBar]</a></li>
<li id="PropWebSeedsLink"><a>QBT_TR(HTTP Sources)QBT_TR[CONTEXT=PropTabBar]</a></li> <li id="PropWebSeedsLink"><a>QBT_TR(HTTP Sources)QBT_TR[CONTEXT=PropTabBar]</a></li>
<li id="PropFilesLink"><a>QBT_TR(Content)QBT_TR[CONTEXT=PropTabBar]</a></li> <li id="PropFilesLink"><a>QBT_TR(Content)QBT_TR[CONTEXT=PropTabBar]</a></li>
</ul> </ul>
<div class="clear"></div> <div class="clear"></div>
</div> </div>

116
src/webui/www/private/properties_content.html

@ -1,49 +1,81 @@
<div id="prop_general"> <div id="prop_general">
<fieldset> <fieldset>
<legend><b>QBT_TR(Transfer)QBT_TR[CONTEXT=PropertiesWidget]</b></legend> <legend><b>QBT_TR(Transfer)QBT_TR[CONTEXT=PropertiesWidget]</b></legend>
<table style="width: 100%"> <table style="width: 100%">
<tr> <tr>
<td class="generalLabel">QBT_TR(Time Active:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="time_elapsed"></td> <td class="generalLabel">QBT_TR(Time Active:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(ETA:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="eta"></td> <td id="time_elapsed"></td>
<td class="generalLabel">QBT_TR(Connections:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="nb_connections"></td> <td class="generalLabel">QBT_TR(ETA:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr><tr> <td id="eta"></td>
<td class="generalLabel">QBT_TR(Downloaded:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="total_downloaded"></td> <td class="generalLabel">QBT_TR(Connections:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Uploaded:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="total_uploaded"></td> <td id="nb_connections"></td>
<td class="generalLabel">QBT_TR(Seeds:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="seeds"></td> </tr>
</tr><tr> <tr>
<td class="generalLabel">QBT_TR(Download Speed:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="dl_speed"></td> <td class="generalLabel">QBT_TR(Downloaded:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Upload Speed:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="up_speed"></td> <td id="total_downloaded"></td>
<td class="generalLabel">QBT_TR(Peers:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="peers"></td> <td class="generalLabel">QBT_TR(Uploaded:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr><tr> <td id="total_uploaded"></td>
<td class="generalLabel">QBT_TR(Download Limit:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="dl_limit"></td> <td class="generalLabel">QBT_TR(Seeds:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Upload Limit:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="up_limit"></td> <td id="seeds"></td>
<td class="generalLabel">QBT_TR(Wasted:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="total_wasted"></td> </tr>
</tr><tr> <tr>
<td class="generalLabel">QBT_TR(Share Ratio:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="share_ratio"></td> <td class="generalLabel">QBT_TR(Download Speed:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Reannounce In:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="reannounce"></td> <td id="dl_speed"></td>
<td class="generalLabel">QBT_TR(Last Seen Complete:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="last_seen"></td> <td class="generalLabel">QBT_TR(Upload Speed:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr> <td id="up_speed"></td>
</table> <td class="generalLabel">QBT_TR(Peers:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="peers"></td>
</tr>
<tr>
<td class="generalLabel">QBT_TR(Download Limit:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="dl_limit"></td>
<td class="generalLabel">QBT_TR(Upload Limit:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="up_limit"></td>
<td class="generalLabel">QBT_TR(Wasted:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="total_wasted"></td>
</tr>
<tr>
<td class="generalLabel">QBT_TR(Share Ratio:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="share_ratio"></td>
<td class="generalLabel">QBT_TR(Reannounce In:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="reannounce"></td>
<td class="generalLabel">QBT_TR(Last Seen Complete:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td id="last_seen"></td>
</tr>
</table>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend><b>QBT_TR(Information)QBT_TR[CONTEXT=PropertiesWidget]</b></legend> <legend><b>QBT_TR(Information)QBT_TR[CONTEXT=PropertiesWidget]</b></legend>
<table style="width: 100%"> <table style="width: 100%">
<tr> <tr>
<td class="generalLabel">QBT_TR(Total Size:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="total_size"></td> <td class="generalLabel">QBT_TR(Total Size:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Pieces:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="pieces"></td> <td id="total_size"></td>
<td class="generalLabel">QBT_TR(Created By:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="created_by"></td> <td class="generalLabel">QBT_TR(Pieces:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr><tr> <td id="pieces"></td>
<td class="generalLabel">QBT_TR(Added On:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="addition_date"></td> <td class="generalLabel">QBT_TR(Created By:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td class="generalLabel">QBT_TR(Completed On:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="completion_date"></td> <td id="created_by"></td>
<td class="generalLabel">QBT_TR(Created On:)QBT_TR[CONTEXT=PropertiesWidget]</td><td id="creation_date"></td> </tr>
</tr><tr> <tr>
<td class="generalLabel">QBT_TR(Torrent Hash:)QBT_TR[CONTEXT=PropertiesWidget]</td><td colspan="5" id="torrent_hash"></td> <td class="generalLabel">QBT_TR(Added On:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr><tr> <td id="addition_date"></td>
<td class="generalLabel">QBT_TR(Save Path:)QBT_TR[CONTEXT=PropertiesWidget]</td><td colspan="5" id="save_path"></td> <td class="generalLabel">QBT_TR(Completed On:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr><tr> <td id="completion_date"></td>
<td class="generalLabel">QBT_TR(Comment:)QBT_TR[CONTEXT=PropertiesWidget]</td><td colspan="5" style="white-space: pre-wrap;" id="comment"></td> <td class="generalLabel">QBT_TR(Created On:)QBT_TR[CONTEXT=PropertiesWidget]</td>
</tr> <td id="creation_date"></td>
</table> </tr>
<tr>
<td class="generalLabel">QBT_TR(Torrent Hash:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td colspan="5" id="torrent_hash"></td>
</tr>
<tr>
<td class="generalLabel">QBT_TR(Save Path:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td colspan="5" id="save_path"></td>
</tr>
<tr>
<td class="generalLabel">QBT_TR(Comment:)QBT_TR[CONTEXT=PropertiesWidget]</td>
<td colspan="5" style="white-space: pre-wrap;" id="comment"></td>
</tr>
</table>
</fieldset> </fieldset>
</div> </div>

11
src/webui/www/private/rename.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Rename)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(Rename)QBT_TR[CONTEXT=TransferListWidget]</title>
@ -11,7 +12,7 @@
var renameKeyboardEvents = new Keyboard({ var renameKeyboardEvents = new Keyboard({
defaultEventType: 'keydown', defaultEventType: 'keydown',
events: { events: {
'enter': function (event) { 'enter': function(event) {
$('renameButton').click(); $('renameButton').click();
event.preventDefault(); event.preventDefault();
} }
@ -42,7 +43,7 @@
hash: hash, hash: hash,
name: name name: name
}, },
onComplete: function () { onComplete: function() {
window.parent.closeWindows(); window.parent.closeWindows();
} }
}).send(); }).send();
@ -51,13 +52,15 @@
}); });
</script> </script>
</head> </head>
<body> <body>
<div style="padding: 10px 10px 0px 10px;"> <div style="padding: 10px 10px 0px 10px;">
<p style="font-weight: bold;">QBT_TR(New name)QBT_TR[CONTEXT=TransferListWidget]:</p> <p style="font-weight: bold;">QBT_TR(New name)QBT_TR[CONTEXT=TransferListWidget]:</p>
<input type="text" id="rename" value="" maxlength="100" style="width: 220px;"/> <input type="text" id="rename" value="" maxlength="100" style="width: 220px;" />
<div style="text-align: center; padding-top: 10px;"> <div style="text-align: center; padding-top: 10px;">
<input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" id="renameButton"/> <input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" id="renameButton" />
</div> </div>
</div> </div>
</body> </body>
</html> </html>

215
src/webui/www/private/scripts/client.js

@ -25,15 +25,15 @@
torrentsTable = new TorrentsTable(); torrentsTable = new TorrentsTable();
torrentPeersTable = new TorrentPeersTable(); torrentPeersTable = new TorrentPeersTable();
var updatePropertiesPanel = function () {}; var updatePropertiesPanel = function() {};
var updateTorrentData = function () {}; var updateTorrentData = function() {};
var updateTrackersData = function () {}; var updateTrackersData = function() {};
var updateTorrentPeersData = function () {}; var updateTorrentPeersData = function() {};
var updateWebSeedsData = function () {}; var updateWebSeedsData = function() {};
var updateTorrentFilesData = function () {}; var updateTorrentFilesData = function() {};
var updateMainData = function () {}; var updateMainData = function() {};
var alternativeSpeedLimits = false; var alternativeSpeedLimits = false;
var queueing_enabled = true; var queueing_enabled = true;
var syncMainDataTimerPeriod = 1500; var syncMainDataTimerPeriod = 1500;
@ -46,12 +46,12 @@ var CATEGORIES_UNCATEGORIZED = 2;
var category_list = {}; var category_list = {};
var selected_category = CATEGORIES_ALL; var selected_category = CATEGORIES_ALL;
var setCategoryFilter = function(){}; var setCategoryFilter = function() {};
var selected_filter = getLocalStorageItem('selected_filter', 'all'); var selected_filter = getLocalStorageItem('selected_filter', 'all');
var setFilter = function(){}; var setFilter = function() {};
var loadSelectedCategory = function () { var loadSelectedCategory = function() {
selected_category = getLocalStorageItem('selected_category', CATEGORIES_ALL); selected_category = getLocalStorageItem('selected_category', CATEGORIES_ALL);
}; };
loadSelectedCategory(); loadSelectedCategory();
@ -65,9 +65,9 @@ function genHash(string) {
return hash; return hash;
} }
window.addEvent('load', function () { window.addEvent('load', function() {
var saveColumnSizes = function () { var saveColumnSizes = function() {
var filters_width = $('Filters').getSize().x; var filters_width = $('Filters').getSize().x;
var properties_height_rel = $('propertiesPanel').getSize().y / Window.getSize().y; var properties_height_rel = $('propertiesPanel').getSize().y / Window.getSize().y;
localStorage.setItem('filters_width', filters_width); localStorage.setItem('filters_width', filters_width);
@ -92,17 +92,17 @@ window.addEvent('load', function () {
else else
filt_w = 120; filt_w = 120;
new MochaUI.Column({ new MochaUI.Column({
id : 'filtersColumn', id: 'filtersColumn',
placement : 'left', placement: 'left',
onResize : saveColumnSizes, onResize: saveColumnSizes,
width : filt_w, width: filt_w,
resizeLimit : [100, 300] resizeLimit: [100, 300]
}); });
new MochaUI.Column({ new MochaUI.Column({
id : 'mainColumn', id: 'mainColumn',
placement : 'main', placement: 'main',
width : null, width: null,
resizeLimit : [100, 300] resizeLimit: [100, 300]
}); });
setCategoryFilter = function(hash) { setCategoryFilter = function(hash) {
@ -113,7 +113,7 @@ window.addEvent('load', function () {
updateMainData(); updateMainData();
}; };
setFilter = function (f) { setFilter = function(f) {
// Visually Select the right filter // Visually Select the right filter
$("all_filter").removeClass("selectedFilter"); $("all_filter").removeClass("selectedFilter");
$("downloading_filter").removeClass("selectedFilter"); $("downloading_filter").removeClass("selectedFilter");
@ -133,22 +133,22 @@ window.addEvent('load', function () {
}; };
new MochaUI.Panel({ new MochaUI.Panel({
id : 'Filters', id: 'Filters',
title : 'Panel', title: 'Panel',
header : false, header: false,
padding : { padding: {
top : 0, top: 0,
right : 0, right: 0,
bottom : 0, bottom: 0,
left : 0 left: 0
}, },
loadMethod : 'xhr', loadMethod: 'xhr',
contentURL : 'filters.html', contentURL: 'filters.html',
onContentLoaded : function () { onContentLoaded: function() {
setFilter(selected_filter); setFilter(selected_filter);
}, },
column : 'filtersColumn', column: 'filtersColumn',
height : 300 height: 300
}); });
initializeWindows(); initializeWindows();
@ -203,7 +203,10 @@ window.addEvent('load', function () {
} }
var categoryHash = genHash(category); var categoryHash = genHash(category);
if (category_list[categoryHash] === null) // This should not happen if (category_list[categoryHash] === null) // This should not happen
category_list[categoryHash] = {name: category, torrents: []}; category_list[categoryHash] = {
name: category,
torrents: []
};
if (!Object.contains(category_list[categoryHash].torrents, torrent['hash'])) { if (!Object.contains(category_list[categoryHash].torrents, torrent['hash'])) {
removeTorrentFromCategoryList(torrent['hash']); removeTorrentFromCategoryList(torrent['hash']);
category_list[categoryHash].torrents = category_list[categoryHash].torrents.combine([torrent['hash']]); category_list[categoryHash].torrents = category_list[categoryHash].torrents.combine([torrent['hash']]);
@ -235,10 +238,13 @@ window.addEvent('load', function () {
categoryList.empty(); categoryList.empty();
var create_link = function(hash, text, count) { var create_link = function(hash, text, count) {
var html = '<a href="#" onclick="setCategoryFilter(' + hash + ');return false;">' + var html = '<a href="#" onclick="setCategoryFilter(' + hash + ');return false;">'
'<img src="theme/inode-directory"/>' + + '<img src="theme/inode-directory"/>'
escapeHtml(text) + ' (' + count + ')' + '</a>'; + escapeHtml(text) + ' (' + count + ')' + '</a>';
var el = new Element('li', {id: hash, html: html}); var el = new Element('li', {
id: hash,
html: html
});
categoriesFilterContextMenu.addTarget(el); categoriesFilterContextMenu.addTarget(el);
return el; return el;
}; };
@ -281,21 +287,21 @@ window.addEvent('load', function () {
}; };
var syncMainDataTimer; var syncMainDataTimer;
var syncMainData = function () { var syncMainData = function() {
var url = new URI('api/v2/sync/maindata'); var url = new URI('api/v2/sync/maindata');
url.setData('rid', syncMainDataLastResponseId); url.setData('rid', syncMainDataLastResponseId);
var request = new Request.JSON({ var request = new Request.JSON({
url : url, url: url,
noCache : true, noCache: true,
method : 'get', method: 'get',
onFailure : function () { onFailure: function() {
var errorDiv = $('error_div'); var errorDiv = $('error_div');
if (errorDiv) if (errorDiv)
errorDiv.set('html', 'QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]'); errorDiv.set('html', 'QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]');
clearTimeout(syncMainDataTimer); clearTimeout(syncMainDataTimer);
syncMainDataTimer = syncMainData.delay(2000); syncMainDataTimer = syncMainData.delay(2000);
}, },
onSuccess : function (response) { onSuccess: function(response) {
$('error_div').set('html', ''); $('error_div').set('html', '');
if (response) { if (response) {
var torrentsTableSelectedRows; var torrentsTableSelectedRows;
@ -312,7 +318,10 @@ window.addEvent('load', function () {
if (response['categories']) { if (response['categories']) {
response['categories'].each(function(category) { response['categories'].each(function(category) {
var categoryHash = genHash(category); var categoryHash = genHash(category);
category_list[categoryHash] = {name: category, torrents: []}; category_list[categoryHash] = {
name: category,
torrents: []
};
}); });
update_categories = true; update_categories = true;
} }
@ -341,7 +350,7 @@ window.addEvent('load', function () {
setupCopyEventHandler(); setupCopyEventHandler();
} }
if (response['torrents_removed']) if (response['torrents_removed'])
response['torrents_removed'].each(function (hash) { response['torrents_removed'].each(function(hash) {
torrentsTable.removeRow(hash); torrentsTable.removeRow(hash);
removeTorrentFromCategoryList(hash); removeTorrentFromCategoryList(hash);
update_categories = true; // Always to update All category update_categories = true; // Always to update All category
@ -350,7 +359,7 @@ window.addEvent('load', function () {
torrentsTable.altRow(); torrentsTable.altRow();
if (response['server_state']) { if (response['server_state']) {
var tmp = response['server_state']; var tmp = response['server_state'];
for(var k in tmp) for (var k in tmp)
serverState[k] = tmp[k]; serverState[k] = tmp[k];
processServerState(); processServerState();
} }
@ -376,7 +385,7 @@ window.addEvent('load', function () {
syncMainDataTimer = syncMainData.delay(100); syncMainDataTimer = syncMainData.delay(100);
}; };
var processServerState = function () { var processServerState = function() {
var transfer_info = friendlyUnit(serverState.dl_info_speed, true); var transfer_info = friendlyUnit(serverState.dl_info_speed, true);
if (serverState.dl_rate_limit > 0) if (serverState.dl_rate_limit > 0)
transfer_info += " [" + friendlyUnit(serverState.dl_rate_limit, true) + "]"; transfer_info += " [" + friendlyUnit(serverState.dl_rate_limit, true) + "]";
@ -390,7 +399,8 @@ window.addEvent('load', function () {
if (speedInTitle) { if (speedInTitle) {
document.title = "QBT_TR([D: %1, U: %2] qBittorrent %3)QBT_TR[CONTEXT=MainWindow]".replace("%1", friendlyUnit(serverState.dl_info_speed, true)).replace("%2", friendlyUnit(serverState.up_info_speed, true)).replace("%3", "${VERSION}"); document.title = "QBT_TR([D: %1, U: %2] qBittorrent %3)QBT_TR[CONTEXT=MainWindow]".replace("%1", friendlyUnit(serverState.dl_info_speed, true)).replace("%2", friendlyUnit(serverState.up_info_speed, true)).replace("%3", "${VERSION}");
document.title += " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]"; document.title += " QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]";
}else }
else
document.title = "qBittorrent ${VERSION} QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]"; document.title = "qBittorrent ${VERSION} QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]";
$('DHTNodes').set('html', 'QBT_TR(DHT: %1 nodes)QBT_TR[CONTEXT=StatusBar]'.replace("%1", serverState.dht_nodes)); $('DHTNodes').set('html', 'QBT_TR(DHT: %1 nodes)QBT_TR[CONTEXT=StatusBar]'.replace("%1", serverState.dht_nodes));
@ -460,16 +470,17 @@ window.addEvent('load', function () {
// Change icon immediately to give some feedback // Change icon immediately to give some feedback
updateAltSpeedIcon(!alternativeSpeedLimits); updateAltSpeedIcon(!alternativeSpeedLimits);
new Request({url: 'api/v2/transfer/toggleSpeedLimitsMode', new Request({
method: 'post', url: 'api/v2/transfer/toggleSpeedLimitsMode',
onComplete: function() { method: 'post',
alternativeSpeedLimits = !alternativeSpeedLimits; onComplete: function() {
updateMainData(); alternativeSpeedLimits = !alternativeSpeedLimits;
}, updateMainData();
onFailure: function() { },
// Restore icon in case of failure onFailure: function() {
updateAltSpeedIcon(alternativeSpeedLimits); // Restore icon in case of failure
} updateAltSpeedIcon(alternativeSpeedLimits);
}
}).send(); }).send();
}); });
@ -517,23 +528,23 @@ window.addEvent('load', function () {
$('StatisticsLink').addEvent('click', StatisticsLinkFN); $('StatisticsLink').addEvent('click', StatisticsLinkFN);
new MochaUI.Panel({ new MochaUI.Panel({
id : 'transferList', id: 'transferList',
title : 'Panel', title: 'Panel',
header : false, header: false,
padding : { padding: {
top : 0, top: 0,
right : 0, right: 0,
bottom : 0, bottom: 0,
left : 0 left: 0
}, },
loadMethod : 'xhr', loadMethod: 'xhr',
contentURL : 'transferlist.html', contentURL: 'transferlist.html',
onContentLoaded : function () { onContentLoaded: function() {
updateMainData(); updateMainData();
}, },
column : 'mainColumn', column: 'mainColumn',
onResize : saveColumnSizes, onResize: saveColumnSizes,
height : null height: null
}); });
var prop_h = localStorage.getItem('properties_height_rel'); var prop_h = localStorage.getItem('properties_height_rel');
if ($defined(prop_h)) if ($defined(prop_h))
@ -541,22 +552,22 @@ window.addEvent('load', function () {
else else
prop_h = Window.getSize().y / 2.0; prop_h = Window.getSize().y / 2.0;
new MochaUI.Panel({ new MochaUI.Panel({
id : 'propertiesPanel', id: 'propertiesPanel',
title : 'Panel', title: 'Panel',
header : true, header: true,
padding : { padding: {
top : 0, top: 0,
right : 0, right: 0,
bottom : 0, bottom: 0,
left : 0 left: 0
}, },
contentURL : 'properties_content.html', contentURL: 'properties_content.html',
require : { require: {
css : ['css/Tabs.css', 'css/dynamicTable.css'], css: ['css/Tabs.css', 'css/dynamicTable.css'],
js : ['scripts/prop-general.js', 'scripts/prop-trackers.js', 'scripts/prop-webseeds.js', 'scripts/prop-files.js'], js: ['scripts/prop-general.js', 'scripts/prop-trackers.js', 'scripts/prop-webseeds.js', 'scripts/prop-files.js'],
}, },
tabsURL : 'properties.html', tabsURL: 'properties.html',
tabsOnload : function() { tabsOnload: function() {
MochaUI.initializeTabs('propertiesTabs'); MochaUI.initializeTabs('propertiesTabs');
updatePropertiesPanel = function() { updatePropertiesPanel = function() {
@ -572,7 +583,7 @@ window.addEvent('load', function () {
updateTorrentFilesData(); updateTorrentFilesData();
}; };
$('PropGeneralLink').addEvent('click', function(e){ $('PropGeneralLink').addEvent('click', function(e) {
$('prop_general').removeClass("invisible"); $('prop_general').removeClass("invisible");
$('prop_trackers').addClass("invisible"); $('prop_trackers').addClass("invisible");
$('prop_webseeds').addClass("invisible"); $('prop_webseeds').addClass("invisible");
@ -582,7 +593,7 @@ window.addEvent('load', function () {
localStorage.setItem('selected_tab', this.id); localStorage.setItem('selected_tab', this.id);
}); });
$('PropTrackersLink').addEvent('click', function(e){ $('PropTrackersLink').addEvent('click', function(e) {
$('prop_trackers').removeClass("invisible"); $('prop_trackers').removeClass("invisible");
$('prop_general').addClass("invisible"); $('prop_general').addClass("invisible");
$('prop_webseeds').addClass("invisible"); $('prop_webseeds').addClass("invisible");
@ -592,7 +603,7 @@ window.addEvent('load', function () {
localStorage.setItem('selected_tab', this.id); localStorage.setItem('selected_tab', this.id);
}); });
$('PropPeersLink').addEvent('click', function(e){ $('PropPeersLink').addEvent('click', function(e) {
$('prop_peers').removeClass("invisible"); $('prop_peers').removeClass("invisible");
$('prop_trackers').addClass("invisible"); $('prop_trackers').addClass("invisible");
$('prop_general').addClass("invisible"); $('prop_general').addClass("invisible");
@ -602,7 +613,7 @@ window.addEvent('load', function () {
localStorage.setItem('selected_tab', this.id); localStorage.setItem('selected_tab', this.id);
}); });
$('PropWebSeedsLink').addEvent('click', function(e){ $('PropWebSeedsLink').addEvent('click', function(e) {
$('prop_webseeds').removeClass("invisible"); $('prop_webseeds').removeClass("invisible");
$('prop_general').addClass("invisible"); $('prop_general').addClass("invisible");
$('prop_trackers').addClass("invisible"); $('prop_trackers').addClass("invisible");
@ -612,7 +623,7 @@ window.addEvent('load', function () {
localStorage.setItem('selected_tab', this.id); localStorage.setItem('selected_tab', this.id);
}); });
$('PropFilesLink').addEvent('click', function(e){ $('PropFilesLink').addEvent('click', function(e) {
$('prop_files').removeClass("invisible"); $('prop_files').removeClass("invisible");
$('prop_general').addClass("invisible"); $('prop_general').addClass("invisible");
$('prop_trackers').addClass("invisible"); $('prop_trackers').addClass("invisible");
@ -622,12 +633,12 @@ window.addEvent('load', function () {
localStorage.setItem('selected_tab', this.id); localStorage.setItem('selected_tab', this.id);
}); });
$('propertiesPanel_collapseToggle').addEvent('click', function(e){ $('propertiesPanel_collapseToggle').addEvent('click', function(e) {
updatePropertiesPanel(); updatePropertiesPanel();
}); });
}, },
column : 'mainColumn', column: 'mainColumn',
height : prop_h height: prop_h
}); });
}); });
@ -679,9 +690,9 @@ keyboardEvents.activate();
var loadTorrentPeersTimer; var loadTorrentPeersTimer;
var syncTorrentPeersLastResponseId = 0; var syncTorrentPeersLastResponseId = 0;
var show_flags = true; var show_flags = true;
var loadTorrentPeersData = function(){ var loadTorrentPeersData = function() {
if ($('prop_peers').hasClass('invisible') || if ($('prop_peers').hasClass('invisible')
$('propertiesPanel_collapseToggle').hasClass('panel-expand')) { || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
syncTorrentPeersLastResponseId = 0; syncTorrentPeersLastResponseId = 0;
torrentPeersTable.clear(); torrentPeersTable.clear();
return; return;
@ -727,7 +738,7 @@ var loadTorrentPeersData = function(){
} }
} }
if (response['peers_removed']) if (response['peers_removed'])
response['peers_removed'].each(function (hash) { response['peers_removed'].each(function(hash) {
torrentPeersTable.removeRow(hash); torrentPeersTable.removeRow(hash);
}); });
torrentPeersTable.updateTable(full_update); torrentPeersTable.updateTable(full_update);
@ -750,7 +761,7 @@ var loadTorrentPeersData = function(){
}).send(); }).send();
}; };
updateTorrentPeersData = function(){ updateTorrentPeersData = function() {
clearTimeout(loadTorrentPeersTimer); clearTimeout(loadTorrentPeersTimer);
loadTorrentPeersData(); loadTorrentPeersData();
}; };

49
src/webui/www/private/scripts/contextmenu.js

@ -174,10 +174,10 @@ var ContextMenu = new Class({
}.bind(this)); }.bind(this));
}, },
updateMenuItems: function () {}, updateMenuItems: function() {},
//show menu //show menu
show: function (trigger) { show: function(trigger) {
if (lastShownContexMenu && lastShownContexMenu != this) if (lastShownContexMenu && lastShownContexMenu != this)
lastShownContexMenu.hide(); lastShownContexMenu.hide();
this.fx.start(1); this.fx.start(1);
@ -188,7 +188,7 @@ var ContextMenu = new Class({
}, },
//hide the menu //hide the menu
hide: function (trigger) { hide: function(trigger) {
if (this.shown) { if (this.shown) {
this.fx.start(0); this.fx.start(0);
//this.menu.fade('out'); //this.menu.fade('out');
@ -198,42 +198,42 @@ var ContextMenu = new Class({
return this; return this;
}, },
setItemChecked: function (item, checked) { setItemChecked: function(item, checked) {
this.menu.getElement('a[href$=' + item + ']').firstChild.style.opacity = this.menu.getElement('a[href$=' + item + ']').firstChild.style.opacity =
checked ? '1' : '0'; checked ? '1' : '0';
return this; return this;
}, },
getItemChecked: function (item) { getItemChecked: function(item) {
return '0' != this.menu.getElement('a[href$=' + item + ']').firstChild.style.opacity; return '0' != this.menu.getElement('a[href$=' + item + ']').firstChild.style.opacity;
}, },
//hide an item //hide an item
hideItem: function (item) { hideItem: function(item) {
this.menu.getElement('a[href$=' + item + ']').parentNode.addClass('invisible'); this.menu.getElement('a[href$=' + item + ']').parentNode.addClass('invisible');
return this; return this;
}, },
//show an item //show an item
showItem: function (item) { showItem: function(item) {
this.menu.getElement('a[href$=' + item + ']').parentNode.removeClass('invisible'); this.menu.getElement('a[href$=' + item + ']').parentNode.removeClass('invisible');
return this; return this;
}, },
//disable the entire menu //disable the entire menu
disable: function () { disable: function() {
this.options.disabled = true; this.options.disabled = true;
return this; return this;
}, },
//enable the entire menu //enable the entire menu
enable: function () { enable: function() {
this.options.disabled = false; this.options.disabled = false;
return this; return this;
}, },
//execute an action //execute an action
execute: function (action, element) { execute: function(action, element) {
if (this.options.actions[action]) { if (this.options.actions[action]) {
this.options.actions[action](element, this, action); this.options.actions[action](element, this, action);
} }
@ -244,7 +244,7 @@ var ContextMenu = new Class({
var TorrentsTableContextMenu = new Class({ var TorrentsTableContextMenu = new Class({
Extends: ContextMenu, Extends: ContextMenu,
updateMenuItems: function () { updateMenuItems: function() {
all_are_seq_dl = true; all_are_seq_dl = true;
there_are_seq_dl = false; there_are_seq_dl = false;
all_are_f_l_piece_prio = true; all_are_f_l_piece_prio = true;
@ -259,7 +259,7 @@ var TorrentsTableContextMenu = new Class({
there_are_auto_tmm = false; there_are_auto_tmm = false;
var h = torrentsTable.selectedRowsIds(); var h = torrentsTable.selectedRowsIds();
h.each(function(item, index){ h.each(function(item, index) {
var data = torrentsTable.rows.get(item).full_data; var data = torrentsTable.rows.get(item).full_data;
if (data['seq_dl'] !== true) if (data['seq_dl'] !== true)
@ -310,7 +310,8 @@ var TorrentsTableContextMenu = new Class({
this.hideItem('FirstLastPiecePrio'); this.hideItem('FirstLastPiecePrio');
this.showItem('SuperSeeding'); this.showItem('SuperSeeding');
this.setItemChecked('SuperSeeding', all_are_super_seeding); this.setItemChecked('SuperSeeding', all_are_super_seeding);
} else { }
else {
if (!show_seq_dl && show_f_l_piece_prio) if (!show_seq_dl && show_f_l_piece_prio)
this.menu.getElement('a[href$=FirstLastPiecePrio]').parentNode.addClass('separator'); this.menu.getElement('a[href$=FirstLastPiecePrio]').parentNode.addClass('separator');
else else
@ -351,22 +352,28 @@ var TorrentsTableContextMenu = new Class({
}, },
updateCategoriesSubMenu : function (category_list) { updateCategoriesSubMenu: function(category_list) {
var categoryList = $('contextCategoryList'); var categoryList = $('contextCategoryList');
categoryList.empty(); categoryList.empty();
categoryList.appendChild(new Element('li', {html: '<a href="javascript:torrentNewCategoryFN();"><img src="theme/list-add" alt="QBT_TR(New...)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(New...)QBT_TR[CONTEXT=TransferListWidget]</a>'})); categoryList.appendChild(new Element('li', {
categoryList.appendChild(new Element('li', {html: '<a href="javascript:torrentSetCategoryFN(0);"><img src="theme/edit-clear" alt="QBT_TR(Reset)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Reset)QBT_TR[CONTEXT=TransferListWidget]</a>'})); html: '<a href="javascript:torrentNewCategoryFN();"><img src="theme/list-add" alt="QBT_TR(New...)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(New...)QBT_TR[CONTEXT=TransferListWidget]</a>'
}));
categoryList.appendChild(new Element('li', {
html: '<a href="javascript:torrentSetCategoryFN(0);"><img src="theme/edit-clear" alt="QBT_TR(Reset)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Reset)QBT_TR[CONTEXT=TransferListWidget]</a>'
}));
var sortedCategories = []; var sortedCategories = [];
Object.each(category_list, function (category) { Object.each(category_list, function(category) {
sortedCategories.push(category.name); sortedCategories.push(category.name);
}); });
sortedCategories.sort(); sortedCategories.sort();
var first = true; var first = true;
Object.each(sortedCategories, function (categoryName) { Object.each(sortedCategories, function(categoryName) {
var categoryHash = genHash(categoryName); var categoryHash = genHash(categoryName);
var el = new Element('li', {html: '<a href="javascript:torrentSetCategoryFN(\'' + categoryHash + '\');"><img src="theme/inode-directory"/> ' + escapeHtml(categoryName) + '</a>'}); var el = new Element('li', {
html: '<a href="javascript:torrentSetCategoryFN(\'' + categoryHash + '\');"><img src="theme/inode-directory"/> ' + escapeHtml(categoryName) + '</a>'
});
if (first) { if (first) {
el.addClass('separator'); el.addClass('separator');
first = false; first = false;
@ -378,7 +385,7 @@ var TorrentsTableContextMenu = new Class({
var CategoriesFilterContextMenu = new Class({ var CategoriesFilterContextMenu = new Class({
Extends: ContextMenu, Extends: ContextMenu,
updateMenuItems: function () { updateMenuItems: function() {
var id = this.options.element.id; var id = this.options.element.id;
if (id != CATEGORIES_ALL && id != CATEGORIES_UNCATEGORIZED) if (id != CATEGORIES_ALL && id != CATEGORIES_UNCATEGORIZED)
this.showItem('DeleteCategory'); this.showItem('DeleteCategory');

2
src/webui/www/private/scripts/download.js

@ -38,5 +38,5 @@ getSavePath = function() {
}; };
$(window).addEventListener("load", function() { $(window).addEventListener("load", function() {
getSavePath(); getSavePath();
}); });

2354
src/webui/www/private/scripts/dynamicTable.js

File diff suppressed because it is too large Load Diff

18
src/webui/www/private/scripts/misc.js

@ -90,14 +90,14 @@ if (!Date.prototype.toISOString) {
} }
Date.prototype.toISOString = function() { Date.prototype.toISOString = function() {
return this.getUTCFullYear() + return this.getUTCFullYear()
'-' + pad(this.getUTCMonth() + 1) + + '-' + pad(this.getUTCMonth() + 1)
'-' + pad(this.getUTCDate()) + + '-' + pad(this.getUTCDate())
'T' + pad(this.getUTCHours()) + + 'T' + pad(this.getUTCHours())
':' + pad(this.getUTCMinutes()) + + ':' + pad(this.getUTCMinutes())
':' + pad(this.getUTCSeconds()) + + ':' + pad(this.getUTCSeconds())
'.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + + '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5)
'Z'; + 'Z';
}; };
}()); }());
@ -108,7 +108,7 @@ if (!Date.prototype.toISOString) {
*/ */
function parseHtmlLinks(text) { function parseHtmlLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a target='_blank' href='$1'>$1</a>"); return text.replace(exp, "<a target='_blank' href='$1'>$1</a>");
} }
function escapeHtml(str) { function escapeHtml(str) {

16
src/webui/www/private/scripts/mocha-init.js

@ -406,7 +406,7 @@ initializeWindows = function() {
} }
}; };
torrentNewCategoryFN = function () { torrentNewCategoryFN = function() {
var hashes = torrentsTable.selectedRowsIds(); var hashes = torrentsTable.selectedRowsIds();
if (hashes.length) { if (hashes.length) {
new MochaUI.Window({ new MochaUI.Window({
@ -425,7 +425,7 @@ initializeWindows = function() {
} }
}; };
torrentSetCategoryFN = function (categoryHash) { torrentSetCategoryFN = function(categoryHash) {
var categoryName = ''; var categoryName = '';
if (categoryHash != 0) if (categoryHash != 0)
categoryName = category_list[categoryHash].name; categoryName = category_list[categoryHash].name;
@ -442,7 +442,7 @@ initializeWindows = function() {
} }
}; };
createCategoryFN = function () { createCategoryFN = function() {
new MochaUI.Window({ new MochaUI.Window({
id: 'newCategoryPage', id: 'newCategoryPage',
title: "QBT_TR(New Category)QBT_TR[CONTEXT=CategoryFilterWidget]", title: "QBT_TR(New Category)QBT_TR[CONTEXT=CategoryFilterWidget]",
@ -459,7 +459,7 @@ initializeWindows = function() {
updateMainData(); updateMainData();
}; };
removeCategoryFN = function (categoryHash) { removeCategoryFN = function(categoryHash) {
var categoryName = category_list[categoryHash].name; var categoryName = category_list[categoryHash].name;
new Request({ new Request({
url: 'api/v2/torrents/removeCategories', url: 'api/v2/torrents/removeCategories',
@ -471,7 +471,7 @@ initializeWindows = function() {
setCategoryFilter(CATEGORIES_ALL); setCategoryFilter(CATEGORIES_ALL);
}; };
deleteUnusedCategoriesFN = function () { deleteUnusedCategoriesFN = function() {
var categories = []; var categories = [];
for (var hash in category_list) { for (var hash in category_list) {
if (torrentsTable.getFilteredTorrentsNumber('all', hash) === 0) if (torrentsTable.getFilteredTorrentsNumber('all', hash) === 0)
@ -487,7 +487,7 @@ initializeWindows = function() {
setCategoryFilter(CATEGORIES_ALL); setCategoryFilter(CATEGORIES_ALL);
}; };
startTorrentsByCategoryFN = function (categoryHash) { startTorrentsByCategoryFN = function(categoryHash) {
var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash); var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash);
if (hashes.length) { if (hashes.length) {
new Request({ new Request({
@ -501,7 +501,7 @@ initializeWindows = function() {
} }
}; };
pauseTorrentsByCategoryFN = function (categoryHash) { pauseTorrentsByCategoryFN = function(categoryHash) {
var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash); var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash);
if (hashes.length) { if (hashes.length) {
new Request({ new Request({
@ -515,7 +515,7 @@ initializeWindows = function() {
} }
}; };
deleteTorrentsByCategoryFN = function (categoryHash) { deleteTorrentsByCategoryFN = function(categoryHash) {
var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash); var hashes = torrentsTable.getFilteredTorrentsHashes('all', categoryHash);
if (hashes.length) { if (hashes.length) {
new MochaUI.Window({ new MochaUI.Window({

92
src/webui/www/private/scripts/prop-files.js

@ -203,27 +203,27 @@ var filesDynTable = new Class({
var tds = tr.getElements('td'); var tds = tr.getElements('td');
for (var i = 0; i < row.length; i++) { for (var i = 0; i < row.length; i++) {
switch (i) { switch (i) {
case 0: case 0:
if (row[i] > 0) if (row[i] > 0)
tds[i].getChildren('input')[0].set('checked', 'checked'); tds[i].getChildren('input')[0].set('checked', 'checked');
else else
tds[i].getChildren('input')[0].removeProperty('checked'); tds[i].getChildren('input')[0].removeProperty('checked');
break; break;
case 3: case 3:
$('pbf_' + id).setValue(row[i].toFloat()); $('pbf_' + id).setValue(row[i].toFloat());
break; break;
case 4: case 4:
if (!is_seed && row[i] > 0) { if (!is_seed && row[i] > 0) {
tds[i].getChildren('select').set('value', row[i]); tds[i].getChildren('select').set('value', row[i]);
$('comboPrio' + id).removeClass("invisible"); $('comboPrio' + id).removeClass("invisible");
} }
else { else {
if (!$('comboPrio' + id).hasClass("invisible")) if (!$('comboPrio' + id).hasClass("invisible"))
$('comboPrio' + id).addClass("invisible"); $('comboPrio' + id).addClass("invisible");
} }
break; break;
default: default:
tds[i].set('html', row[i]); tds[i].set('html', row[i]);
} }
} }
return true; return true;
@ -241,29 +241,29 @@ var filesDynTable = new Class({
for (var i = 0; i < row.length; i++) { for (var i = 0; i < row.length; i++) {
var td = new Element('td'); var td = new Element('td');
switch (i) { switch (i) {
case 0: case 0:
var tree_img = new Element('img', { var tree_img = new Element('img', {
src: 'images/L.gif', src: 'images/L.gif',
style: 'margin-bottom: -2px' style: 'margin-bottom: -2px'
}); });
td.adopt(tree_img, createDownloadedCB(id, row[i])); td.adopt(tree_img, createDownloadedCB(id, row[i]));
break; break;
case 1: case 1:
td.set('html', row[i]); td.set('html', row[i]);
td.set('title', row[i]); td.set('title', row[i]);
break; break;
case 3: case 3:
td.adopt(new ProgressBar(row[i].toFloat(), { td.adopt(new ProgressBar(row[i].toFloat(), {
'id': 'pbf_' + id, 'id': 'pbf_' + id,
'width': 80 'width': 80
})); }));
break; break;
case 4: case 4:
td.adopt(createPriorityCombo(id, row[i])); td.adopt(createPriorityCombo(id, row[i]));
break; break;
default: default:
td.set('html', row[i]); td.set('html', row[i]);
break; break;
} }
td.injectInside(tr); td.injectInside(tr);
} }
@ -273,8 +273,8 @@ var filesDynTable = new Class({
var loadTorrentFilesDataTimer; var loadTorrentFilesDataTimer;
var loadTorrentFilesData = function() { var loadTorrentFilesData = function() {
if ($('prop_files').hasClass('invisible') || if ($('prop_files').hasClass('invisible')
$('propertiesPanel_collapseToggle').hasClass('panel-expand')) { || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
// Tab changed, don't do anything // Tab changed, don't do anything
return; return;
} }

42
src/webui/www/private/scripts/prop-general.js

@ -27,8 +27,8 @@ var clearData = function() {
var loadTorrentDataTimer; var loadTorrentDataTimer;
var loadTorrentData = function() { var loadTorrentData = function() {
if ($('prop_general').hasClass('invisible') || if ($('prop_general').hasClass('invisible')
$('propertiesPanel_collapseToggle').hasClass('panel-expand')) { || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
// Tab changed, don't do anything // Tab changed, don't do anything
return; return;
} }
@ -58,8 +58,8 @@ var loadTorrentData = function() {
// Update Torrent data // Update Torrent data
if (data.seeding_time > 0) if (data.seeding_time > 0)
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", friendlyDuration(data.time_elapsed)) .replace("%1", friendlyDuration(data.time_elapsed))
.replace("%2", friendlyDuration(data.seeding_time)); .replace("%2", friendlyDuration(data.seeding_time));
else else
temp = friendlyDuration(data.time_elapsed); temp = friendlyDuration(data.time_elapsed);
$('time_elapsed').set('html', temp); $('time_elapsed').set('html', temp);
@ -67,28 +67,28 @@ var loadTorrentData = function() {
$('eta').set('html', friendlyDuration(data.eta)); $('eta').set('html', friendlyDuration(data.eta));
temp = "QBT_TR(%1 (%2 max))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 max))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", data.nb_connections) .replace("%1", data.nb_connections)
.replace("%2", data.nb_connections_limit < 0 ? "∞" : data.nb_connections_limit); .replace("%2", data.nb_connections_limit < 0 ? "∞" : data.nb_connections_limit);
$('nb_connections').set('html', temp); $('nb_connections').set('html', temp);
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", friendlyUnit(data.total_downloaded)) .replace("%1", friendlyUnit(data.total_downloaded))
.replace("%2", friendlyUnit(data.total_downloaded_session)); .replace("%2", friendlyUnit(data.total_downloaded_session));
$('total_downloaded').set('html', temp); $('total_downloaded').set('html', temp);
temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 this session))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", friendlyUnit(data.total_uploaded)) .replace("%1", friendlyUnit(data.total_uploaded))
.replace("%2", friendlyUnit(data.total_uploaded_session)); .replace("%2", friendlyUnit(data.total_uploaded_session));
$('total_uploaded').set('html', temp); $('total_uploaded').set('html', temp);
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", friendlyUnit(data.dl_speed, true)) .replace("%1", friendlyUnit(data.dl_speed, true))
.replace("%2", friendlyUnit(data.dl_speed_avg, true)); .replace("%2", friendlyUnit(data.dl_speed_avg, true));
$('dl_speed').set('html', temp); $('dl_speed').set('html', temp);
temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 avg.))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", friendlyUnit(data.up_speed, true)) .replace("%1", friendlyUnit(data.up_speed, true))
.replace("%2", friendlyUnit(data.up_speed_avg, true)); .replace("%2", friendlyUnit(data.up_speed_avg, true));
$('up_speed').set('html', temp); $('up_speed').set('html', temp);
temp = (data.dl_limit == -1 ? "∞" : friendlyUnit(data.dl_limit, true)); temp = (data.dl_limit == -1 ? "∞" : friendlyUnit(data.dl_limit, true));
@ -100,13 +100,13 @@ var loadTorrentData = function() {
$('total_wasted').set('html', friendlyUnit(data.total_wasted)); $('total_wasted').set('html', friendlyUnit(data.total_wasted));
temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", data.seeds) .replace("%1", data.seeds)
.replace("%2", data.seeds_total); .replace("%2", data.seeds_total);
$('seeds').set('html', temp); $('seeds').set('html', temp);
temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 (%2 total))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", data.peers) .replace("%1", data.peers)
.replace("%2", data.peers_total); .replace("%2", data.peers_total);
$('peers').set('html', temp); $('peers').set('html', temp);
$('share_ratio').set('html', data.share_ratio.toFixed(2)); $('share_ratio').set('html', data.share_ratio.toFixed(2));
@ -123,9 +123,9 @@ var loadTorrentData = function() {
if (data.pieces_num != -1) if (data.pieces_num != -1)
temp = "QBT_TR(%1 x %2 (have %3))QBT_TR[CONTEXT=PropertiesWidget]" temp = "QBT_TR(%1 x %2 (have %3))QBT_TR[CONTEXT=PropertiesWidget]"
.replace("%1", data.pieces_num) .replace("%1", data.pieces_num)
.replace("%2", friendlyUnit(data.piece_size)) .replace("%2", friendlyUnit(data.piece_size))
.replace("%3", data.pieces_have); .replace("%3", data.pieces_have);
else else
temp = "QBT_TR(Unknown)QBT_TR[CONTEXT=HttpServer]"; temp = "QBT_TR(Unknown)QBT_TR[CONTEXT=HttpServer]";
$('pieces').set('html', temp); $('pieces').set('html', temp);

4
src/webui/www/private/scripts/prop-trackers.js

@ -54,8 +54,8 @@ var current_hash = "";
var loadTrackersDataTimer; var loadTrackersDataTimer;
var loadTrackersData = function() { var loadTrackersData = function() {
if ($('prop_trackers').hasClass('invisible') || if ($('prop_trackers').hasClass('invisible')
$('propertiesPanel_collapseToggle').hasClass('panel-expand')) { || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
// Tab changed, don't do anything // Tab changed, don't do anything
return; return;
} }

4
src/webui/www/private/scripts/prop-webseeds.js

@ -54,8 +54,8 @@ var current_hash = "";
var loadWebSeedsDataTimer; var loadWebSeedsDataTimer;
var loadWebSeedsData = function() { var loadWebSeedsData = function() {
if ($('prop_webseeds').hasClass('invisible') || if ($('prop_webseeds').hasClass('invisible')
$('propertiesPanel_collapseToggle').hasClass('panel-expand')) { || $('propertiesPanel_collapseToggle').hasClass('panel-expand')) {
// Tab changed, don't do anything // Tab changed, don't do anything
return; return;
} }

11
src/webui/www/private/setlocation.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Set location)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Set location)QBT_TR[CONTEXT=HttpServer]</title>
@ -10,7 +11,7 @@
var setLocationKeyboardEvents = new Keyboard({ var setLocationKeyboardEvents = new Keyboard({
defaultEventType: 'keydown', defaultEventType: 'keydown',
events: { events: {
'enter': function (event) { 'enter': function(event) {
$('setLocationButton').click(); $('setLocationButton').click();
event.preventDefault(); event.preventDefault();
} }
@ -35,7 +36,7 @@
hashes: hashesList, hashes: hashesList,
location: location location: location
}, },
onComplete: function () { onComplete: function() {
window.parent.closeWindows(); window.parent.closeWindows();
} }
}).send(); }).send();
@ -43,13 +44,15 @@
}); });
</script> </script>
</head> </head>
<body> <body>
<div style="padding: 10px 10px 0px 10px;"> <div style="padding: 10px 10px 0px 10px;">
<p style="font-weight: bold;">QBT_TR(Location)QBT_TR[CONTEXT=TransferListWidget]:</p> <p style="font-weight: bold;">QBT_TR(Location)QBT_TR[CONTEXT=TransferListWidget]:</p>
<input type="text" id="setLocation" value="" maxlength="100" style="width: 220px;"/> <input type="text" id="setLocation" value="" maxlength="100" style="width: 220px;" />
<div style="text-align: center; padding-top: 10px;"> <div style="text-align: center; padding-top: 10px;">
<input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" id="setLocationButton"/> <input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" id="setLocationButton" />
</div> </div>
</div> </div>
</body> </body>
</html> </html>

47
src/webui/www/private/transferlist.html

@ -16,74 +16,73 @@
</div> </div>
<script> <script>
//create a context menu //create a context menu
var torrentsTableContextMenu = new TorrentsTableContextMenu({ var torrentsTableContextMenu = new TorrentsTableContextMenu({
targets : '.torrentsTableContextMenuTarget', targets: '.torrentsTableContextMenuTarget',
menu : 'torrentsTableMenu', menu: 'torrentsTableMenu',
actions : { actions: {
Start : function (element, ref) { Start: function(element, ref) {
startFN(); startFN();
}, },
Pause : function (element, ref) { Pause: function(element, ref) {
pauseFN(); pauseFN();
}, },
ForceStart : function (element, ref) { ForceStart: function(element, ref) {
setForceStartFN(); setForceStartFN();
}, },
Delete : function (element, ref) { Delete: function(element, ref) {
deleteFN(); deleteFN();
}, },
SetLocation : function (element, ref) { SetLocation: function(element, ref) {
setLocationFN(); setLocationFN();
}, },
Rename : function(element, ref) { Rename: function(element, ref) {
renameFN(); renameFN();
}, },
prioTop : function (element, ref) { prioTop: function(element, ref) {
setPriorityFN('top_prio'); setPriorityFN('top_prio');
}, },
prioUp : function (element, ref) { prioUp: function(element, ref) {
setPriorityFN('increase_prio'); setPriorityFN('increase_prio');
}, },
prioDown : function (element, ref) { prioDown: function(element, ref) {
setPriorityFN('decrease_prio'); setPriorityFN('decrease_prio');
}, },
prioBottom : function (element, ref) { prioBottom: function(element, ref) {
setPriorityFN('bottom_prio'); setPriorityFN('bottom_prio');
}, },
DownloadLimit : function (element, ref) { DownloadLimit: function(element, ref) {
downloadLimitFN(); downloadLimitFN();
}, },
UploadLimit : function (element, ref) { UploadLimit: function(element, ref) {
uploadLimitFN(); uploadLimitFN();
}, },
SequentialDownload : function (element, ref) { SequentialDownload: function(element, ref) {
toggleSequentialDownloadFN(); toggleSequentialDownloadFN();
}, },
FirstLastPiecePrio : function (element, ref) { FirstLastPiecePrio: function(element, ref) {
toggleFirstLastPiecePrioFN(); toggleFirstLastPiecePrioFN();
}, },
AutoTorrentManagement : function (element, ref) { AutoTorrentManagement: function(element, ref) {
autoTorrentManagementFN(); autoTorrentManagementFN();
}, },
ForceRecheck : function (element, ref) { ForceRecheck: function(element, ref) {
recheckFN(); recheckFN();
}, },
SuperSeeding : function (element, ref) { SuperSeeding: function(element, ref) {
setSuperSeedingFN(!ref.getItemChecked('SuperSeeding')); setSuperSeedingFN(!ref.getItemChecked('SuperSeeding'));
} }
}, },
offsets : { offsets: {
x : -15, x: -15,
y : 2 y: 2
} }
}); });

138
src/webui/www/private/upload.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Upload local torrent)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Upload local torrent)QBT_TR[CONTEXT=HttpServer]</title>
@ -8,77 +9,78 @@
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> <script src="scripts/lib/mootools-1.2-core-yc.js"></script>
<script src="scripts/download.js"></script> <script src="scripts/download.js"></script>
</head> </head>
<body>
<iframe id="upload_frame" name="upload_frame" class="invisible" src="javascript:false;"></iframe>
<form action="api/v2/torrents/add" enctype="multipart/form-data" method="post" id="uploadForm" style="text-align: center;" target="upload_frame">
<div style="margin-top: 25px; display: inline-block; border: 1px solid lightgrey; border-radius: 4px;">
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple"/>
</div>
<fieldset class="settings" style="border: 0; text-align: left;">
<div class="formRow" style="margin-top: 12px;">
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="savepath" name="savepath" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="rename" name="rename" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="start_torrent" class="leftLabelLarge">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="start_torrent" checked="checked"/>
<input type="hidden" id="add_paused" name="paused" value="true" disabled="disabled"/>
</div>
<div class="formRow">
<label for="skip_checking" class="leftLabelLarge">QBT_TR(Skip hash check)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="skip_checking" name="skip_checking" value="true"/>
</div>
<div class="formRow">
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="root_folder" name="root_folder" value="true" checked="checked"/>
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="sequentialDownload" name="sequentialDownload" value="true"/>
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="firstLastPiecePrio" name="firstLastPiecePrio" value="true"/>
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="dlLimit" name="dlLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="upLimit" name="upLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div id="submitbutton" style="margin-top: 30px; text-align: center;">
<button type="submit" style="font-size: 1em;">QBT_TR(Upload Torrents)QBT_TR[CONTEXT=HttpServer]</button>
</div>
</fieldset>
</form>
<script>
var submitted = false; <body>
<iframe id="upload_frame" name="upload_frame" class="invisible" src="javascript:false;"></iframe>
<form action="api/v2/torrents/add" enctype="multipart/form-data" method="post" id="uploadForm" style="text-align: center;" target="upload_frame">
<div style="margin-top: 25px; display: inline-block; border: 1px solid lightgrey; border-radius: 4px;">
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
</div>
<fieldset class="settings" style="border: 0; text-align: left;">
<div class="formRow" style="margin-top: 12px;">
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="savepath" name="savepath" style="width: 16em;" />
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="rename" name="rename" style="width: 16em;" />
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category" style="width: 16em;" />
</div>
<div class="formRow">
<label for="start_torrent" class="leftLabelLarge">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="start_torrent" checked="checked" />
<input type="hidden" id="add_paused" name="paused" value="true" disabled="disabled" />
</div>
<div class="formRow">
<label for="skip_checking" class="leftLabelLarge">QBT_TR(Skip hash check)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="skip_checking" name="skip_checking" value="true" />
</div>
<div class="formRow">
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" id="root_folder" name="root_folder" value="true" checked="checked" />
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="sequentialDownload" name="sequentialDownload" value="true" />
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" id="firstLastPiecePrio" name="firstLastPiecePrio" value="true" />
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="dlLimit" name="dlLimit" style="width: 16em;" placeholder="Bytes/s" />
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="upLimit" name="upLimit" style="width: 16em;" placeholder="Bytes/s" />
</div>
<div id="submitbutton" style="margin-top: 30px; text-align: center;">
<button type="submit" style="font-size: 1em;">QBT_TR(Upload Torrents)QBT_TR[CONTEXT=HttpServer]</button>
</div>
</fieldset>
</form>
<script>
var submitted = false;
$('uploadForm').addEventListener("submit", function() { $('uploadForm').addEventListener("submit", function() {
$('upload_spinner').style.display = "block"; $('upload_spinner').style.display = "block";
submitted = true; submitted = true;
}); });
$('upload_frame').addEventListener("load", function() { $('upload_frame').addEventListener("load", function() {
if (submitted) if (submitted)
window.parent.closeWindows(); window.parent.closeWindows();
}); });
$('start_torrent').addEventListener('change', function() { $('start_torrent').addEventListener('change', function() {
$('add_paused').disabled = $('start_torrent').checked; $('add_paused').disabled = $('start_torrent').checked;
}); });
</script> </script>
<div id="upload_spinner" class="mochaSpinner"></div> <div id="upload_spinner" class="mochaSpinner"></div>
</body> </body>
</html> </html>

91
src/webui/www/private/uploadlimit.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>QBT_TR(Torrent Upload Speed Limiting)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(Torrent Upload Speed Limiting)QBT_TR[CONTEXT=TransferListWidget]</title>
@ -9,54 +10,56 @@
<script src="scripts/lib/mocha-yc.js"></script> <script src="scripts/lib/mocha-yc.js"></script>
<script src="scripts/lib/parametrics.js"></script> <script src="scripts/lib/parametrics.js"></script>
</head> </head>
<body> <body>
<div style="width: 100%; text-align: center; margin: 0 auto; overflow: hidden"> <div style="width: 100%; text-align: center; margin: 0 auto; overflow: hidden">
<div id="uplimitSlider" class="slider"> <div id="uplimitSlider" class="slider">
<div id="uplimitUpdate" class="update">QBT_TR(Upload limit:)QBT_TR[CONTEXT=PropertiesWidget] <input id="uplimitUpdatevalue" size="6" placeholder="∞" style="text-align: center;"> <span id="upLimitUnit">QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]</span></div> <div id="uplimitUpdate" class="update">QBT_TR(Upload limit:)QBT_TR[CONTEXT=PropertiesWidget] <input id="uplimitUpdatevalue" size="6" placeholder="∞" style="text-align: center;"> <span id="upLimitUnit">QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]</span></div>
<div class="sliderWrapper"> <div class="sliderWrapper">
<div id="uplimitSliderknob" class="sliderknob"></div> <div id="uplimitSliderknob" class="sliderknob"></div>
<div id="uplimitSliderarea" class="sliderarea"></div> <div id="uplimitSliderarea" class="sliderarea"></div>
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<script> <script>
var hashes = new URI().getData('hashes').split('|'); var hashes = new URI().getData('hashes').split('|');
setUpLimit = function() { setUpLimit = function() {
var limit = $("uplimitUpdatevalue").value.toInt() * 1024; var limit = $("uplimitUpdatevalue").value.toInt() * 1024;
if (hashes[0] == "global") { if (hashes[0] == "global") {
new Request({ new Request({
url: 'api/v2/transfer/setUploadLimit', url: 'api/v2/transfer/setUploadLimit',
method: 'post', method: 'post',
data: { data: {
'limit': limit 'limit': limit
}, },
onComplete: function() { onComplete: function() {
window.parent.updateMainData(); window.parent.updateMainData();
window.parent.closeWindows(); window.parent.closeWindows();
}
}).send();
} }
}).send(); else {
} new Request({
else { url: 'api/v2/torrents/setUploadLimit',
new Request({ method: 'post',
url: 'api/v2/torrents/setUploadLimit', data: {
method: 'post', 'hashes': hashes.join('|'),
data: { 'limit': limit
'hashes': hashes.join('|'), },
'limit': limit onComplete: function() {
}, window.parent.closeWindows();
onComplete: function() { }
window.parent.closeWindows(); }).send();
} }
}).send(); }
} </script>
} <input type="button" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="setUpLimit()" />
</script> </div>
<input type="button" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="setUpLimit()"/>
</div>
<script> <script>
MochaUI.addUpLimitSlider(hashes); MochaUI.addUpLimitSlider(hashes);
</script> </script>
</body> </body>
</html> </html>

2
src/webui/www/public/css/style.css

@ -33,5 +33,5 @@ body {
} }
#logo img { #logo img {
height: 11em; height: 11em;
} }

77
src/webui/www/public/login.html

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${LANG}"> <html lang="${LANG}">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>qBittorrent QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</title> <title>qBittorrent QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</title>
@ -7,50 +8,53 @@
<link rel="stylesheet" type="text/css" href="css/style.css" /> <link rel="stylesheet" type="text/css" href="css/style.css" />
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> <script src="scripts/lib/mootools-1.2-core-yc.js"></script>
<script> <script>
window.onload = function() { window.onload = function() {
$('username').focus(); $('username').focus();
$('username').select(); $('username').select();
}; };
window.addEvent('domready', function() { window.addEvent('domready', function() {
$('loginform').addEvent('submit', function(e) { $('loginform').addEvent('submit', function(e) {
new Event(e).stop(); new Event(e).stop();
submitLoginForm(); submitLoginForm();
});
}); });
});
function submitLoginForm() { function submitLoginForm() {
new Request({ new Request({
url: 'api/v2/auth/login', url: 'api/v2/auth/login',
method: 'post', method: 'post',
data: $('loginform').toQueryString(), data: $('loginform').toQueryString(),
onComplete: function() { onComplete: function() {
$('password').set('value', ''); $('password').set('value', '');
}, },
onFailure: function(xhr) { onFailure: function(xhr) {
if (xhr.responseText !== "") { if (xhr.responseText !== "") {
$('error_msg').set('html', xhr.responseText); $('error_msg').set('html', xhr.responseText);
} else { }
$('error_msg').set('html', 'QBT_TR(Unable to log in, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]'); else {
} $('error_msg').set('html', 'QBT_TR(Unable to log in, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]');
}, }
onSuccess: function(text) { },
if (text == "Ok.") { onSuccess: function(text) {
// Session started. Simply reload page. if (text == "Ok.") {
window.location.reload(); // Session started. Simply reload page.
} else { window.location.reload();
$('error_msg').set('html', 'QBT_TR(Invalid Username or Password.)QBT_TR[CONTEXT=HttpServer]'); }
} else {
} $('error_msg').set('html', 'QBT_TR(Invalid Username or Password.)QBT_TR[CONTEXT=HttpServer]');
}).send(); }
} }
}).send();
}
</script> </script>
</head> </head>
<body> <body>
<div id="main"> <div id="main">
<h1>qBittorrent QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</h1> <h1>qBittorrent QBT_TR(Web UI)QBT_TR[CONTEXT=OptionsDialog]</h1>
<div id="logo" class="col"> <div id="logo" class="col">
<img src="images/skin/qbittorrent-tray.svg" alt="qBittorrent logo"/> <img src="images/skin/qbittorrent-tray.svg" alt="qBittorrent logo" />
</div> </div>
<div id="formplace" class="col"> <div id="formplace" class="col">
<form id="loginform"> <form id="loginform">
@ -61,11 +65,12 @@
<label for="password">QBT_TR(Password)QBT_TR[CONTEXT=HttpServer]</label><br /> <label for="password">QBT_TR(Password)QBT_TR[CONTEXT=HttpServer]</label><br />
<input type="password" id="password" name="password" /></div> <input type="password" id="password" name="password" /></div>
<div class="row"> <div class="row">
<input type="submit" id="login" value="QBT_TR(Login)QBT_TR[CONTEXT=HttpServer]" /> <input type="submit" id="login" value="QBT_TR(Login)QBT_TR[CONTEXT=HttpServer]" />
</div> </div>
</form> </form>
</div> </div>
<div id="error_msg"></div> <div id="error_msg"></div>
</div> </div>
</body> </body>
</html> </html>

Loading…
Cancel
Save