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. 22
      src/webui/www/private/css/Core.css
  4. 401
      src/webui/www/private/css/Layout.css
  5. 68
      src/webui/www/private/css/Tabs.css
  6. 378
      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>

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

@ -6,17 +6,17 @@ Theme: Default
Copyright: Copyright:
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>.
License: License:
MIT-style license. MIT-style license.
Notes: Notes:
CSS rules in this file: CSS rules in this file:
1. Rules required by all MochaUI components or are shared by more than one. 1. Rules required by all MochaUI components or are shared by more than one.
2. Theme specific adjustments to plugin styles. 2. Theme specific adjustments to plugin styles.
3. Miscellaneous rules that have no better place to go. 3. Miscellaneous rules that have no better place to go.
*/ */
/* Required By All /* Required By All
@ -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 {

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

@ -6,61 +6,61 @@ Theme: Default
Copyright: Copyright:
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>.
License: License:
MIT-style license. MIT-style license.
Required by: Required by:
Tabs.js Tabs.js
*/ */
/* 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;
} }

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

@ -6,12 +6,12 @@ Theme: Default
Copyright: Copyright:
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>.
License: License:
MIT-style license. MIT-style license.
Required by: Required by:
Window.js and Modal.css Window.js and Modal.css
*/ */
@ -19,160 +19,159 @@ 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;
} }
/* /*
We get a little creative here in order to define a gradient in the CSS using a query We get a little creative here in order to define a gradient in the CSS using a query
string appended to a background image. string appended to a background image.
"from" is the top color of the gradient. "to" is the bottom color of the gradient. "from" is the top color of the gradient. "to" is the bottom color of the gradient.
Both must be hex values without the leading # sign. Both must be hex values without the leading # sign.
*/ */
.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;
} }
/* /*
To use images for these buttons: To use images for these buttons:
1. Set the useCanvasControls window option to false. 1. Set the useCanvasControls window option to false.
2. If you use a different button size you may need to reposition the controls. 2. If you use a different button size you may need to reposition the controls.
Modify the controlsOffset window option. Modify the controlsOffset window option.
2. Replcac the background-color with a background-image for each button. 2. Replcac the background-color with a background-image for each button.
*/ */
.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