@ -0,0 +1,4 @@ |
|||
FROM scratch |
|||
|
|||
# copy local files |
|||
COPY root/ / |
@ -0,0 +1,18 @@ |
|||
qBittorrent Web UI |
|||
--- |
|||
|
|||
### Browser compatibility |
|||
|
|||
| Browser | Lower bound | |
|||
| ----------------- | -------------------------------------------------- | |
|||
| Chrome | [The release from 1 year ago][Chrome-history-link] | |
|||
| Firefox | [Oldest active ESR release][Firefox-ESR-link] | |
|||
| Microsoft Edge | [The release from 1 year ago][MSEdge-history-link] | |
|||
| Safari | [The release from 1 year ago][Safari-history-link] | |
|||
|
|||
The upper bound will always be the latest stable release. |
|||
|
|||
[Chrome-history-link]: https://en.wikipedia.org/wiki/Google_Chrome_version_history |
|||
[Firefox-ESR-link]: https://en.wikipedia.org/wiki/Firefox_version_history#Current_and_future_releases |
|||
[MSEdge-history-link]: https://en.wikipedia.org/wiki/Microsoft_Edge#Release_history |
|||
[Safari-history-link]: https://en.wikipedia.org/wiki/Safari_version_history |
@ -0,0 +1,69 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Add Peers)QBT_TR[CONTEXT=PeersAdditionDialog]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
new Keyboard({ |
|||
defaultEventType: 'keydown', |
|||
events: { |
|||
'Escape': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Esc': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
} |
|||
} |
|||
}).activate(); |
|||
|
|||
window.addEvent('domready', function() { |
|||
const hash = new URI().getData('hash'); |
|||
if (!hash) |
|||
return false; |
|||
|
|||
$('peers').focus(); |
|||
|
|||
$('addPeersOk').addEvent('click', function(e) { |
|||
new Event(e).stop(); |
|||
|
|||
const peers = $('peers').get('value').trim().split(/[\r\n]+/); |
|||
if (peers.length === 0) |
|||
return |
|||
|
|||
new Request({ |
|||
url: 'api/v2/torrents/addPeers', |
|||
method: 'post', |
|||
data: { |
|||
hashes: hash, |
|||
peers: peers.join('|') |
|||
}, |
|||
onFailure: function() { |
|||
alert("QBT_TR(Unable to add peers. Please ensure you are adhering to the IP:port format.)QBT_TR[CONTEXT=HttpServer]"); |
|||
}, |
|||
onSuccess: function() { |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="padding: 10px 10px 0px 10px;"> |
|||
<p>QBT_TR(List of peers to add (one IP per line):)QBT_TR[CONTEXT=PeersAdditionDialog]</p> |
|||
<textarea id="peers" rows="10" style="width: 100%;" placeholder="QBT_TR(Format: IPv4:port / [IPv6]:port)QBT_TR[CONTEXT=PeersAdditionDialog]"></textarea> |
|||
<div style="margin-top: 10px; text-align: center;"> |
|||
<button onclick="parent.closeWindows();">QBT_TR(Cancel)QBT_TR[CONTEXT=PeersAdditionDialog]</button> |
|||
<button id="addPeersOk">QBT_TR(Ok)QBT_TR[CONTEXT=PeersAdditionDialog]</button> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
</html> |
@ -0,0 +1,58 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Trackers addition dialog)QBT_TR[CONTEXT=TrackersAdditionDialog]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', function() { |
|||
new Keyboard({ |
|||
defaultEventType: 'keydown', |
|||
events: { |
|||
'Escape': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Esc': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
} |
|||
} |
|||
}).activate(); |
|||
|
|||
$('trackersUrls').focus(); |
|||
$('addTrackersButton').addEvent('click', function(e) { |
|||
new Event(e).stop(); |
|||
const hash = new URI().getData('hash'); |
|||
new Request({ |
|||
url: 'api/v2/torrents/addTrackers', |
|||
method: 'post', |
|||
data: { |
|||
hash: hash, |
|||
urls: $('trackersUrls').value |
|||
}, |
|||
onComplete: function() { |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="text-align: center;"> |
|||
<br/> |
|||
<h2 class="vcenter">QBT_TR(List of trackers to add (one per line):)QBT_TR[CONTEXT=TrackersAdditionDialog]</h2> |
|||
<textarea name="list" id="trackersUrls" rows="10" cols="1"></textarea> |
|||
<br/> |
|||
<input type="button" value="QBT_TR(Add)QBT_TR[CONTEXT=HttpServer]" id="addTrackersButton" /> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,54 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Deletion confirmation - qBittorrent)QBT_TR[CONTEXT=confirmDeletionDlg]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', function() { |
|||
const isDeletingFiles = (new URI().getData('deleteFiles') === "true"); |
|||
$('deleteFromDiskCB').checked = isDeletingFiles; |
|||
|
|||
const hashes = new URI().getData('hashes').split('|'); |
|||
$('cancelBtn').focus(); |
|||
$('cancelBtn').addEvent('click', function(e) { |
|||
new Event(e).stop(); |
|||
window.parent.closeWindows(); |
|||
}); |
|||
$('confirmBtn').addEvent('click', function(e) { |
|||
parent.torrentsTable.deselectAll(); |
|||
new Event(e).stop(); |
|||
const cmd = 'api/v2/torrents/delete'; |
|||
const deleteFiles = $('deleteFromDiskCB').get('checked'); |
|||
new Request({ |
|||
url: cmd, |
|||
method: 'post', |
|||
data: { |
|||
'hashes': hashes.join('|'), |
|||
'deleteFiles': deleteFiles |
|||
}, |
|||
onComplete: function() { |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<br/> |
|||
|
|||
<p> QBT_TR(Are you sure you want to delete the selected torrents from the transfer list?)QBT_TR[CONTEXT=HttpServer]</p> |
|||
<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;"> |
|||
<input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" /> <input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]" /> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,55 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Deletion confirmation)QBT_TR[CONTEXT=RSSWidget]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', () => { |
|||
const paths = decodeURIComponent(new URI().getData('paths')).split('|'); |
|||
$('cancelBtn').focus(); |
|||
$('cancelBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
window.parent.closeWindows(); |
|||
}); |
|||
$('confirmBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
let completionCount = 0; |
|||
paths.forEach((path) => { |
|||
new Request({ |
|||
url: 'api/v2/rss/removeItem', |
|||
noCache: true, |
|||
method: 'post', |
|||
data: { |
|||
path: path |
|||
}, |
|||
onComplete: (response) => { |
|||
++completionCount; |
|||
if (completionCount === paths.length) { |
|||
window.parent.qBittorrent.Rss.updateRssFeedList(); |
|||
window.parent.closeWindows(); |
|||
} |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="padding: 10px 10px 0px 10px;"> |
|||
<p>QBT_TR(Are you sure you want to delete the selected RSS feeds?)QBT_TR[CONTEXT=RSSWidget]</p> |
|||
<div style="text-align: right;"> |
|||
<input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" /> |
|||
<input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]" /> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,48 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Clear downloaded episodes)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', () => { |
|||
const rules = decodeURIComponent(new URI().getData('rules')).split('|'); |
|||
|
|||
$('cancelBtn').focus(); |
|||
$('cancelBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
window.parent.MochaUI.closeWindow(window.parent.$('clearRulesPage')); |
|||
}); |
|||
$('confirmBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
let completionCount = 0; |
|||
rules.forEach((rule) => { |
|||
window.parent.qBittorrent.RssDownloader.modifyRuleState(rule, 'previouslyMatchedEpisodes', [], () => { |
|||
++completionCount; |
|||
if (completionCount === rules.length) { |
|||
window.parent.qBittorrent.RssDownloader.updateRulesList(); |
|||
window.parent.MochaUI.closeWindow(window.parent.$('clearRulesPage')); |
|||
} |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="padding: 10px 10px 0px 10px;"> |
|||
<p>QBT_TR(Are you sure you want to clear the list of downloaded episodes for the selected rule?)QBT_TR[CONTEXT=AutomatedRssDownloader]</p> |
|||
<div style="text-align: right;"> |
|||
<input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" /> |
|||
<input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]" /> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,56 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Rule deletion confirmation)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', () => { |
|||
const rules = decodeURIComponent(new URI().getData('rules')).split('|'); |
|||
|
|||
$('cancelBtn').focus(); |
|||
$('cancelBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
window.parent.MochaUI.closeWindow(window.parent.$('removeRulePage')); |
|||
}); |
|||
$('confirmBtn').addEvent('click', (e) => { |
|||
new Event(e).stop(); |
|||
let completionCount = 0; |
|||
rules.forEach((rule) => { |
|||
new Request({ |
|||
url: 'api/v2/rss/removeRule', |
|||
noCache: true, |
|||
method: 'post', |
|||
data: { |
|||
ruleName: rule |
|||
}, |
|||
onComplete: (response) => { |
|||
++completionCount; |
|||
if (completionCount === rules.length) { |
|||
window.parent.qBittorrent.RssDownloader.updateRulesList(); |
|||
window.parent.MochaUI.closeWindow(window.parent.$('removeRulePage')); |
|||
} |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="padding: 10px 10px 0px 10px;"> |
|||
<p>QBT_TR(Are you sure you want to remove the selected download rules?)QBT_TR[CONTEXT=AutomatedRssDownloader]</p> |
|||
<div style="text-align: right;"> |
|||
<input type="button" id="cancelBtn" value="QBT_TR(No)QBT_TR[CONTEXT=MainWindow]" /> |
|||
<input type="button" id="confirmBtn" value="QBT_TR(Yes)QBT_TR[CONTEXT=MainWindow]" /> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,54 @@ |
|||
/* |
|||
|
|||
Core.css for Mocha UI |
|||
|
|||
Theme: Default |
|||
|
|||
Copyright: |
|||
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. |
|||
|
|||
License: |
|||
MIT-style license. |
|||
|
|||
Notes: |
|||
CSS rules in this file: |
|||
|
|||
1. Rules required by all MochaUI components or are shared by more than one. |
|||
2. Theme specific adjustments to plugin styles. |
|||
3. Miscellaneous rules that have no better place to go. |
|||
|
|||
*/ |
|||
|
|||
/* Required By All |
|||
---------------------------------------------------------------- */ |
|||
|
|||
/* Clears */ |
|||
|
|||
.clear { |
|||
clear: both; |
|||
height: 0; |
|||
} |
|||
|
|||
* html .clear { |
|||
font-size: 1px; |
|||
line-height: 1px; |
|||
overflow: hidden; |
|||
visibility: hidden; |
|||
} |
|||
|
|||
/* Miscellaneous |
|||
---------------------------------------------------------------- */ |
|||
|
|||
#themeControl { |
|||
margin-top: 2px; |
|||
} |
|||
|
|||
|
|||
/* Theme Specific Adjustments to Default Plugin Styles |
|||
---------------------------------------------------------------- */ |
|||
|
|||
/* Folder Tree */ |
|||
|
|||
.tree li a { |
|||
color: #3f3f3f !important; |
|||
} |
@ -0,0 +1,443 @@ |
|||
/* |
|||
|
|||
Core.css for Mocha UI |
|||
|
|||
Theme: Default |
|||
|
|||
Copyright: |
|||
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. |
|||
|
|||
License: |
|||
MIT-style license. |
|||
|
|||
Required by: |
|||
Layout.js |
|||
|
|||
*/ |
|||
|
|||
/* Layout |
|||
---------------------------------------------------------------- */ |
|||
|
|||
html, body { |
|||
background: #fff; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; /* Required */ |
|||
} |
|||
|
|||
#desktop { |
|||
position: relative; |
|||
min-width: 400px; /* Helps keep header content from wrapping */ |
|||
height: 100%; |
|||
min-height: 100%; |
|||
overflow: hidden; |
|||
cursor: default; /* Fix for issue in IE7. IE7 wants to use the I-bar text cursor */ |
|||
} |
|||
|
|||
#desktopHeader { |
|||
background: #f2f2f2; |
|||
} |
|||
|
|||
#desktopTitlebarWrapper { |
|||
position: relative; |
|||
height: 45px; |
|||
overflow: hidden; |
|||
background: #718BA6 url(../images/bg-header.gif) repeat-x; |
|||
} |
|||
|
|||
#desktopTitlebar { |
|||
padding: 7px 8px 6px 8px; |
|||
height: 32px; |
|||
background: url(../images/logo.gif) no-repeat; |
|||
background-position: left 0; |
|||
} |
|||
|
|||
#desktopTitlebar h1.applicationTitle { |
|||
display: none; |
|||
margin: 0; |
|||
padding: 0 5px 0 0; |
|||
font-size: 20px; |
|||
line-height: 25px; |
|||
font-weight: bold; |
|||
color: #fff; |
|||
} |
|||
|
|||
#desktopTitlebar h2.tagline { |
|||
padding: 7px 0 0 0; |
|||
font-family: Verdana, Arial, Helvetica, sans-serif; |
|||
font-size: 10px; |
|||
color: #d4dce4; |
|||
font-weight: bold; |
|||
text-align: center; |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
#desktopTitlebar h2.tagline .taglineEm { |
|||
color: #fff; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
#topNav { |
|||
font-family: Verdana, Arial, Helvetica, sans-serif; |
|||
font-size: 10px; |
|||
position: absolute; |
|||
right: 0; |
|||
top: 0; |
|||
color: #d4dce4; |
|||
text-align: right; |
|||
padding: 13px 10px 0 0; |
|||
} |
|||
|
|||
#topNav a { |
|||
color: #fff; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
#topNav a:hover { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
/* Navbar */ |
|||
|
|||
#desktopNavbar { |
|||
background: #f2f2f2; |
|||
/*height: 30px;*/ |
|||
margin: 0 0px; |
|||
overflow: hidden; /* Remove this line if you want the menu to be backward compatible with Firefox 2 */ |
|||
/* Fixes by Chris */ |
|||
/*background-color: #ccc;*/ |
|||
height: 20px; |
|||
border-bottom: 1px solid #3f3f3f; |
|||
} |
|||
|
|||
#desktopNavbar ul { |
|||
padding: 0; |
|||
margin: 0; |
|||
list-style: none; |
|||
font-size: 12px; |
|||
} |
|||
|
|||
#desktopNavbar>ul>li { |
|||
float: left; |
|||
} |
|||
|
|||
#desktopNavbar a { |
|||
display: block; |
|||
} |
|||
|
|||
#desktopNavbar ul li a { |
|||
/*padding: 6px 10px 6px 10px;*/ |
|||
color: #333; |
|||
font-weight: normal; |
|||
/* Fix by Chris */ |
|||
padding: 2px 10px 6px 10px; |
|||
} |
|||
|
|||
#desktopNavbar ul li a:hover { |
|||
color: #333; |
|||
/* Fix By Chris */ |
|||
background-color: #fff; |
|||
} |
|||
|
|||
#desktopNavbar ul li a.arrow-right, #desktopNavbar ul li a:hover.arrow-right { |
|||
background-image: url(../images/arrow-right.gif); |
|||
background-repeat: no-repeat; |
|||
background-position: right 7px; |
|||
} |
|||
|
|||
#desktopNavbar li ul { |
|||
border: 1px solid #3f3f3f; |
|||
background: #fff url(../images/bg-dropdown.gif) repeat-y; |
|||
position: absolute; |
|||
left: -999em; |
|||
z-index: 8000; |
|||
/* Fix by Chris */ |
|||
margin-top: -6px; |
|||
} |
|||
|
|||
#desktopNavbar li:hover ul ul, |
|||
#desktopNavbar li.ieHover ul ul, |
|||
#desktopNavbar li:hover ul ul ul, |
|||
#desktopNavbar li.ieHover ul ul ul { |
|||
left: -999em; |
|||
} |
|||
|
|||
#desktopNavbar li ul ul { /* third-and-above-level lists */ |
|||
margin: -22px 0 0 163px; |
|||
} |
|||
|
|||
#desktopNavbar li ul li .check { |
|||
position: absolute; |
|||
top: 8px; |
|||
left: 6px; |
|||
width: 5px; |
|||
height: 5px; |
|||
background: #555; |
|||
overflow: hidden; |
|||
line-height: 1px; |
|||
font-size: 1px; |
|||
} |
|||
|
|||
#desktopNavbar li ul li a { |
|||
position: relative; |
|||
/*padding: 1px 9px 1px 25px;*/ |
|||
min-width: 120px; |
|||
color: #3f3f3f; |
|||
font-weight: normal; |
|||
/* Fix By Chris */ |
|||
padding: 1px 10px 1px 20px; |
|||
/* Reduce left padding */ |
|||
} |
|||
|
|||
#desktopNavbar li ul li a:hover { |
|||
background: #6C98D9; |
|||
color: #fff; |
|||
-moz-border-radius: 2px; |
|||
} |
|||
|
|||
#desktopNavbar li ul li a:hover .check { |
|||
background: #fff; |
|||
} |
|||
|
|||
#desktopNavbar li:hover ul, |
|||
#desktopNavbar li.ieHover ul, |
|||
#desktopNavbar li li.ieHover ul, |
|||
#desktopNavbar li li li.ieHover ul, |
|||
#desktopNavbar li li:hover ul, |
|||
#desktopNavbar li li li:hover ul { /* lists nested under hovered list items */ |
|||
left: auto; |
|||
} |
|||
|
|||
#desktopNavbar li:hover { /* For IE7 */ |
|||
position: static; |
|||
} |
|||
|
|||
li.divider { |
|||
margin-top: 2px; |
|||
padding-top: 3px; |
|||
border-top: 1px solid #ebebeb; |
|||
} |
|||
|
|||
#pageWrapper { |
|||
position: relative; |
|||
overflow: hidden; /* This can be set to hidden or auto */ |
|||
border-top: 1px solid #909090; |
|||
border-bottom: 1px solid #909090; |
|||
/*height: 100%;*/ |
|||
} |
|||
|
|||
/* Footer */ |
|||
|
|||
#desktopFooterWrapper { |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: 0; |
|||
width: 100%; |
|||
height: 30px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
#desktopFooter { |
|||
font-family: Verdana, Arial, Helvetica, sans-serif; |
|||
font-size: 11px; |
|||
height: 24px; |
|||
padding: 6px 8px 0 8px; |
|||
background: #f2f2f2; |
|||
} |
|||
|
|||
|
|||
|
|||
/* Panel Layout |
|||
---------------------------------------------------------------- */ |
|||
|
|||
/* Columns */ |
|||
|
|||
.column { |
|||
position: relative; |
|||
float: left; |
|||
overflow: hidden; /* Required by IE6 */ |
|||
} |
|||
|
|||
/* Panels */ |
|||
|
|||
.panel { |
|||
position: relative; |
|||
overflow: auto; |
|||
background: #f8f8f8; |
|||
border-bottom: 1px solid #b9b9b9; |
|||
} |
|||
|
|||
.panelWrapper.collapsed .panel-header { |
|||
border-bottom: 0; |
|||
} |
|||
|
|||
.panelAlt { |
|||
background: #f2f2f2; |
|||
} |
|||
|
|||
.bottomPanel { |
|||
border-bottom: 0; |
|||
} |
|||
|
|||
.pad { |
|||
padding: 8px; |
|||
} |
|||
|
|||
#mainPanel { |
|||
background: #fff; |
|||
} |
|||
|
|||
.panel-header { |
|||
position: relative; |
|||
background: #f1f1f1 url(../images/bg-panel-header.gif) repeat-x; |
|||
height: 30px; |
|||
overflow: hidden; |
|||
border-bottom: 1px solid #d3d3d3; |
|||
} |
|||
|
|||
.panel-headerContent { |
|||
padding-top: 2px; |
|||
} |
|||
|
|||
.panel-headerContent.tabs { |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: left -68px; |
|||
} |
|||
|
|||
.panel-header h2 { |
|||
display: inline-block; |
|||
font-size: 12px; |
|||
margin: 0; |
|||
padding: 3px 8px 0 8px; |
|||
height: 22px; |
|||
overflow: hidden; |
|||
color: #333; |
|||
} |
|||
|
|||
.panel-collapse { |
|||
background: url(../icons/collapse.svg) left top no-repeat; |
|||
} |
|||
|
|||
.panel-expand { |
|||
background: url(../icons/collapse.svg) left top no-repeat; |
|||
transform: rotate(180deg); |
|||
} |
|||
|
|||
.icon16 { |
|||
margin: 4px 0 0 2px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
/* Column and Panel Handles */ |
|||
|
|||
.horizontalHandle { |
|||
height: 4px; |
|||
line-height: 1px; |
|||
font-size: 1px; |
|||
overflow: hidden; |
|||
background: #eee url(../images/bg-handle-horizontal.gif) repeat-x; |
|||
} |
|||
|
|||
.horizontalHandle.detached .handleIcon { |
|||
background: transparent; |
|||
} |
|||
|
|||
.horizontalHandle .handleIcon { |
|||
margin: 0 auto; |
|||
height: 4px; |
|||
line-height: 1px; |
|||
font-size: 1px; |
|||
overflow: hidden; |
|||
background: url(../images/handle-icon-horizontal.gif) center center no-repeat; |
|||
} |
|||
|
|||
.columnHandle { |
|||
min-height: 10px; |
|||
float: left; |
|||
width: 4px; |
|||
overflow: hidden; |
|||
background: #c3c3c3 url(../images/handle-icon.gif) center center no-repeat; |
|||
border: 1px solid #909090; |
|||
border-top: 0; |
|||
border-bottom: 0; |
|||
} |
|||
|
|||
/* Toolboxes */ |
|||
|
|||
.toolbox { |
|||
float: right; |
|||
margin-top: 3px; |
|||
padding: 0 5px; |
|||
height: 24px; |
|||
overflow: hidden; |
|||
text-align: right; |
|||
} |
|||
|
|||
.panel-header-toolbox { |
|||
} |
|||
|
|||
div.toolbox.divider { /* Have to specify div here for IE6's sake */ |
|||
background: url(../images/toolbox-divider.gif) repeat-y; |
|||
padding-left: 8px; |
|||
} |
|||
|
|||
.toolbox img.disabled { |
|||
cursor: default; |
|||
} |
|||
|
|||
.iconWrapper { |
|||
display: inline-block; |
|||
height: 22px; |
|||
min-width: 22px; |
|||
overflow: hidden; |
|||
border: 1px solid transparent; |
|||
} |
|||
|
|||
* html .iconWrapper { |
|||
padding: 1px; |
|||
border: 0; |
|||
} |
|||
|
|||
.iconWrapper img { |
|||
cursor: pointer; |
|||
margin: 0; |
|||
padding: 3px; |
|||
} |
|||
|
|||
.iconWrapper:hover { |
|||
border: 1px solid #a0a0a0; |
|||
-moz-border-radius: 3px; |
|||
} |
|||
|
|||
#spinnerWrapper { |
|||
width: 16px; |
|||
height: 16px; |
|||
background: url(../images/spinner-placeholder.gif) no-repeat; |
|||
margin: 4px 5px 0 5px; |
|||
} |
|||
|
|||
#spinner { |
|||
display: none; |
|||
background: url(../images/spinner.gif) no-repeat; |
|||
width: 16px; |
|||
height: 16px; |
|||
} |
|||
|
|||
#desktopFooter td { |
|||
vertical-align: top; |
|||
text-align: left; |
|||
} |
|||
|
|||
td.speedLabel { |
|||
cursor: pointer; |
|||
min-width: 18em; |
|||
} |
|||
|
|||
#freeSpaceOnDisk { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
#DHTNodes { |
|||
white-space: nowrap; |
|||
} |
@ -0,0 +1,65 @@ |
|||
/* |
|||
|
|||
Tabs.css for Mocha UI |
|||
|
|||
Theme: Default |
|||
|
|||
Copyright: |
|||
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. |
|||
|
|||
License: |
|||
MIT-style license. |
|||
|
|||
Required by: |
|||
Tabs.js |
|||
|
|||
*/ |
|||
|
|||
/* Toolbar Tabs */ |
|||
|
|||
.toolbarTabs { |
|||
padding: 0 5px 2px 2px; |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: left -70px; |
|||
overflow: visible; |
|||
} |
|||
|
|||
.tab-menu { |
|||
padding-top: 1px; |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0; |
|||
line-height: 16px; |
|||
font-size: 11px; |
|||
} |
|||
|
|||
.tab-menu li { |
|||
float: left; |
|||
margin: 0 0 5px 0; |
|||
cursor: pointer; |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: left -35px; |
|||
} |
|||
|
|||
.tab-menu li.selected { |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: left 0; |
|||
} |
|||
|
|||
.tab-menu li a { |
|||
display: block; |
|||
margin-left: 8px; |
|||
padding: 6px 15px 5px 9px; |
|||
text-align: center; |
|||
font-weight: normal; |
|||
color: #181818; |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: right -35px; |
|||
} |
|||
|
|||
.tab-menu li.selected a { |
|||
color: #181818; |
|||
font-weight: bold; |
|||
background: url(../images/tabs.gif) repeat-x; |
|||
background-position: right 0; |
|||
} |
@ -0,0 +1,396 @@ |
|||
/* |
|||
|
|||
Window.css for Mocha UI |
|||
|
|||
Theme: Default |
|||
|
|||
Copyright: |
|||
Copyright (c) 2007-2009 Greg Houston, <http://greghoustondesign.com/>. |
|||
|
|||
License: |
|||
MIT-style license. |
|||
|
|||
Required by: |
|||
Window.js and Modal.css |
|||
|
|||
*/ |
|||
|
|||
/* Windows |
|||
---------------------------------------------------------------- */ |
|||
|
|||
.mocha { |
|||
display: none; |
|||
overflow: hidden; |
|||
background-color: #e5e5e5; |
|||
} |
|||
|
|||
.mocha.isFocused {} |
|||
|
|||
.mochaOverlay { |
|||
position: absolute; /* This is also set in theme.js in order to make theme transitions smoother */ |
|||
top: 0; |
|||
left: 0; |
|||
} |
|||
|
|||
/* |
|||
|
|||
We get a little creative here in order to define a gradient in the CSS using a query |
|||
string appended to a background image. |
|||
|
|||
"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. |
|||
|
|||
*/ |
|||
|
|||
.mochaTitlebar { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
background: url(../images/spacer.gif?from=fafafa&to=e5e5e5); |
|||
} |
|||
|
|||
.mochaTitlebar h3 { |
|||
font-size: 12px; |
|||
line-height: 15px; |
|||
font-weight: bold; |
|||
margin: 0; |
|||
padding: 5px 10px 4px 12px; |
|||
color: #888; |
|||
} |
|||
|
|||
.mocha.isFocused .mochaTitlebar h3 { |
|||
color: #181818; |
|||
} |
|||
|
|||
.mochaToolbarWrapper { |
|||
width: 100%; /* For IE */ |
|||
position: relative; |
|||
height: 29px; |
|||
background: #f1f1f1; |
|||
overflow: hidden; |
|||
border-top: 1px solid #d9d9d9; |
|||
} |
|||
|
|||
div.mochaToolbarWrapper.bottom { |
|||
border: 0; |
|||
border-bottom: 1px solid #d9d9d9; |
|||
} |
|||
|
|||
.mochaToolbar { |
|||
width: 100%; /* For IE */ |
|||
border-top: 1px solid #fff; |
|||
} |
|||
|
|||
.mochaContentBorder { |
|||
border-top: 1px solid #dadada; |
|||
border-bottom: 1px solid #dadada; |
|||
} |
|||
|
|||
.mochaContentWrapper { /* Has a fixed height and scrollbars if required. */ |
|||
font-size: 12px; |
|||
overflow: auto; |
|||
background: #fff; |
|||
} |
|||
|
|||
.mochaContent { |
|||
padding: 10px 12px; |
|||
} |
|||
|
|||
.mocha .handle { |
|||
position: absolute; |
|||
background: #0f0; |
|||
width: 3px; |
|||
height: 3px; |
|||
z-index: 2; |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ |
|||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ |
|||
opacity: .0; |
|||
-moz-opacity: .0; |
|||
overflow: hidden; |
|||
font-size: 1px; /* For IE6 */ |
|||
} |
|||
|
|||
.mocha .corner { /* Corner resize handles */ |
|||
width: 10px; |
|||
height: 10px; |
|||
background: #f00; |
|||
} |
|||
|
|||
.mocha .cornerSE { /* Bottom right resize handle */ |
|||
width: 20px; |
|||
height: 20px; |
|||
background: #fefefe; /* This is the color of the visible resize handle */ |
|||
} |
|||
|
|||
.mochaCanvasHeader { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
background: transparent; |
|||
z-index: -1; |
|||
visibility: hidden; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.mochaControls { |
|||
position: absolute; |
|||
width: 52px; |
|||
top: 8px; |
|||
right: 8px; |
|||
height: 14px; |
|||
z-index: 4; |
|||
background: transparent; |
|||
} |
|||
|
|||
.mochaCanvasControls { |
|||
position: absolute; |
|||
top: 8px; |
|||
right: 8px; |
|||
z-index: 3; |
|||
background: transparent; |
|||
} |
|||
|
|||
/* |
|||
To use images for these buttons: |
|||
1. Set the useCanvasControls window option to false. |
|||
2. If you use a different button size you may need to reposition the controls. |
|||
Modify the controlsOffset window option. |
|||
2. Replcac the background-color with a background-image for each button. |
|||
|
|||
*/ |
|||
.mochaMinimizeButton, .mochaMaximizeButton, .mochaCloseButton { |
|||
float: right; |
|||
width: 14px; |
|||
height: 14px; |
|||
font-size: 1px; |
|||
cursor: pointer; |
|||
z-index: 4; |
|||
color: #666; |
|||
background-color: #fff; |
|||
margin-left: 5px; |
|||
} |
|||
|
|||
.mochaMinimizeButton { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.mochaMaximizeButton { |
|||
} |
|||
|
|||
.mochaCloseButton { |
|||
} |
|||
|
|||
.mochaSpinner { |
|||
display: none; |
|||
position: absolute; |
|||
bottom: 7px; |
|||
left: 6px; |
|||
width: 16px; |
|||
height: 16px; |
|||
background: url(../images/spinner.gif) no-repeat; |
|||
} |
|||
|
|||
.mochaIframe { |
|||
width: 100%; |
|||
} |
|||
|
|||
/* Fix for IE6 select z-index issue */ |
|||
.zIndexFix { |
|||
display: block; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
z-index: -1; |
|||
filter: mask(); |
|||
width: 100px; |
|||
height: 100px; |
|||
border: 1px solid transparent; |
|||
} |
|||
|
|||
/* Viewport overlays |
|||
---------------------------------------------------------------- */ |
|||
|
|||
#modalOverlay { |
|||
display: none; |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
background: #000; |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ |
|||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ |
|||
opacity: 0; |
|||
-moz-opacity: 0; |
|||
z-index: 10000; |
|||
} |
|||
|
|||
/* Fix for IE6 select z-index issue */ |
|||
#modalFix { |
|||
display: none; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ |
|||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ |
|||
opacity: 0; |
|||
-moz-opacity: 0; |
|||
z-index: 9999; |
|||
} |
|||
|
|||
/* Underlay */ |
|||
|
|||
#windowUnderlay { |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
background: #fff; |
|||
} |
|||
|
|||
* html #windowUnderlay { |
|||
position: absolute; |
|||
} |
|||
|
|||
/* 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 { |
|||
background-color: transparent !important; |
|||
} |
|||
|
|||
.windowClosed { |
|||
visibility: hidden; |
|||
display: none; |
|||
position: absolute; |
|||
top: -20000px; |
|||
left: -20000px; |
|||
z-index: -1; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.windowClosed .mochaContentBorder, .windowClosed .mochaToolbarWrapper, |
|||
.windowClosed .mochaTitlebar, .windowClosed .mochaControls, |
|||
.windowClosed .mochaCanvasControls { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
visibility: hidden; |
|||
display: none; |
|||
z-index: -1; |
|||
} |
|||
|
|||
/* Modals */ |
|||
|
|||
.modal2 { |
|||
border: 8px solid #fff; |
|||
} |
|||
|
|||
.modal2 .mochaContentBorder { |
|||
border-width: 0px; |
|||
} |
|||
|
|||
/* Window Themes */ |
|||
|
|||
.mocha.no-canvas { |
|||
background: #e5e5e5; |
|||
border: 1px solid #555; |
|||
} |
|||
|
|||
.mocha.no-canvas .mochaTitlebar { |
|||
background: #e5e5e5; |
|||
} |
|||
|
|||
.mocha.transparent .mochaTitlebar h3 { |
|||
color: #fff; |
|||
display: none; |
|||
} |
|||
|
|||
.mocha.transparent .mochaContentWrapper { |
|||
background: transparent; |
|||
} |
|||
|
|||
.mocha.notification { |
|||
background: #cedff2; |
|||
} |
|||
|
|||
.mocha.notification .mochaTitlebar { |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE8 */ |
|||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); /* IE6 and 7*/ |
|||
opacity: .0; |
|||
-moz-opacity: 0; |
|||
} |
|||
|
|||
.mocha.notification .mochaContentBorder { |
|||
border-width: 0px; |
|||
} |
|||
|
|||
.mocha.notification .mochaContentWrapper { |
|||
text-align: center; |
|||
font-size: 12px; |
|||
font-weight: bold; |
|||
background: transparent; |
|||
} |
|||
|
|||
/* Example Window Themes */ |
|||
|
|||
#about_contentWrapper { |
|||
background: #e5e5e5 url(../images/logo2.gif) 3px 3px no-repeat; |
|||
} |
|||
|
|||
#builder_contentWrapper { |
|||
background: #f5f5f7; |
|||
} |
|||
|
|||
#json01 .mochaTitlebar { |
|||
background: #6dd2db; |
|||
} |
|||
|
|||
#json02 .mochaTitlebar { |
|||
background: #6db6db; |
|||
} |
|||
|
|||
#json03 .mochaTitlebar { |
|||
background: #6d92db; |
|||
} |
|||
|
|||
.jsonExample .mochaTitlebar h3 { |
|||
color: #ddd; |
|||
} |
|||
|
|||
/* This does not work in IE6. */ |
|||
.isFocused.jsonExample .mochaTitlebar h3 { |
|||
color: #fff; |
|||
} |
|||
|
|||
#fxmorpherExample .mochaContentWrapper { |
|||
background: #577a9e; |
|||
} |
|||
|
|||
#clock { |
|||
background: #fff; |
|||
} |
|||
|
|||
/* Workaround to make invisible buttons clickable */ |
|||
|
|||
.mochaMinimizeButton.replaced, |
|||
.mochaMaximizeButton.replaced, |
|||
.mochaCloseButton.replaced { |
|||
background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important; |
|||
} |
|||
|
|||
/* iOS iframe scrolling */ |
|||
.windowFrame .mochaContentWrapper { |
|||
/* scroll the Window content. !important required. */ |
|||
overflow: auto !important; |
|||
-webkit-overflow-scrolling: touch; |
|||
} |
|||
|
|||
.windowFrame .mochaContent { |
|||
height: 100%; |
|||
} |
|||
|
|||
.windowFrame iframe { |
|||
/* fix double scroll bar by reducing frame height. !important required. */ |
|||
height: calc(100% - 5px) !important; |
|||
} |
@ -0,0 +1,109 @@ |
|||
/************************************************************** |
|||
|
|||
Dynamic Table |
|||
v 0.4 |
|||
|
|||
**************************************************************/ |
|||
|
|||
.dynamicTable tbody tr { |
|||
background-color: #fff; |
|||
} |
|||
|
|||
.dynamicTable tbody tr:nth-child(even), |
|||
.dynamicTable tbody tr.alt { |
|||
background-color: #eee; |
|||
} |
|||
|
|||
#transferList .dynamicTable td { |
|||
padding: 0 2px; |
|||
} |
|||
|
|||
.dynamicTable tbody tr.selected { |
|||
background-color: #354158; |
|||
color: #fff; |
|||
} |
|||
|
|||
.dynamicTable tbody tr:hover { |
|||
background-color: #ee6600; |
|||
color: #fff; |
|||
} |
|||
|
|||
#transferList tr:hover { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
#transferList img.stateIcon { |
|||
height: 1.3em; |
|||
vertical-align: middle; |
|||
margin-bottom: -1px; |
|||
} |
|||
|
|||
tr.dynamicTableHeader { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.dynamicTable { |
|||
table-layout: fixed; |
|||
width: 1%; |
|||
padding: 0; |
|||
border-spacing: 0; |
|||
} |
|||
|
|||
.dynamicTable th { |
|||
background-color: #eee; |
|||
padding: 4px; |
|||
white-space: nowrap; |
|||
border-right-color: #ccc; |
|||
border-right-style: solid; |
|||
border-right-width: 1px; |
|||
box-sizing: border-box; |
|||
-moz-box-sizing: border-box; |
|||
-webkit-box-sizing: border-box; |
|||
} |
|||
|
|||
.dynamicTable td { |
|||
padding: 0px 4px; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.dynamicTable thead tr { |
|||
background-color: #eee; |
|||
} |
|||
|
|||
.dynamicTable th, |
|||
.dynamicTable td { |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.dynamicTable th.sorted { |
|||
background-image: url(../icons/go-up.svg); |
|||
background-position: right; |
|||
background-repeat: no-repeat; |
|||
background-size: 15px; |
|||
} |
|||
|
|||
.dynamicTable th.sorted.reverse { |
|||
background-image: url(../icons/go-down.svg); |
|||
} |
|||
|
|||
.dynamicTable td img.flags { |
|||
height: 1.25em; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.dynamicTableFixedHeaderDiv { |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.dynamicTableDiv { |
|||
overflow: auto; |
|||
} |
|||
|
|||
.dynamicTableDiv thead th { |
|||
line-height: 0px !important; |
|||
height: 0px !important; |
|||
padding-top: 0px !important; |
|||
padding-bottom: 0px !important; |
|||
} |
@ -0,0 +1,8 @@ |
|||
#desktop { |
|||
display: none; |
|||
} |
|||
|
|||
#noscript { |
|||
color: #f00; |
|||
text-align: center; |
|||
} |
@ -0,0 +1,639 @@ |
|||
/* 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; }*/ |
|||
|
|||
a img, :link img, :visited img { |
|||
border: none; |
|||
} |
|||
|
|||
/*table { border-collapse: collapse; border-spacing: 0; }*/ |
|||
|
|||
:focus { |
|||
outline: none; |
|||
} |
|||
|
|||
/* Structure */ |
|||
|
|||
body { |
|||
margin: 0; |
|||
text-align: left; |
|||
font-family: Arial, Helvetica, sans-serif; |
|||
font-size: 12px; |
|||
line-height: 18px; |
|||
color: #555; |
|||
} |
|||
|
|||
.aside { |
|||
width: 300px; |
|||
} |
|||
|
|||
.invisible { |
|||
display: none; |
|||
} |
|||
|
|||
/* Typography */ |
|||
|
|||
h2, h3, h4 { |
|||
margin: 0; |
|||
padding: 0 0 5px 0; |
|||
font-size: 12px; |
|||
font-weight: bold; |
|||
color: #333; |
|||
} |
|||
|
|||
h2 { |
|||
font-size: 14px; |
|||
color: #555; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
#mochaPage h3 { |
|||
display: block; |
|||
font-size: 12px; |
|||
padding: 6px 0 6px 0; |
|||
margin: 0 0 8px 0; |
|||
border-bottom: 1px solid #bbb; |
|||
} |
|||
|
|||
#error_div { |
|||
color: #f00; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
h4 { |
|||
font-size: 11px; |
|||
} |
|||
|
|||
a { |
|||
color: #e60; |
|||
text-decoration: none; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
a:hover { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
p { |
|||
margin: 0; |
|||
padding: 0 0 9px 0; |
|||
} |
|||
|
|||
/* List Elements */ |
|||
|
|||
ul { |
|||
list-style: outside; |
|||
margin: 0 0 9px 16px; |
|||
} |
|||
|
|||
dt { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
dd { |
|||
padding: 0 0 9px 0; |
|||
} |
|||
|
|||
/* Code */ |
|||
|
|||
pre { |
|||
background-color: #f6f6f6; |
|||
color: #006600; |
|||
display: block; |
|||
font-family: 'Courier New', Courier, monospace; |
|||
font-size: 11px; |
|||
max-height: 250px; |
|||
overflow: auto; |
|||
margin: 0 0 10px 0; |
|||
padding: 10px; |
|||
border: 1px solid #d1d7dc; |
|||
} |
|||
|
|||
/* Dividers */ |
|||
|
|||
hr { |
|||
background-color: #ddd; |
|||
color: #ccc; |
|||
height: 1px; |
|||
border: 0px; |
|||
} |
|||
|
|||
.vcenter { |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
#urls { |
|||
width: 90%; |
|||
height: 100%; |
|||
} |
|||
|
|||
#trackersUrls { |
|||
width: 90%; |
|||
height: 100%; |
|||
} |
|||
|
|||
#Filters ul { |
|||
list-style-type: none; |
|||
} |
|||
|
|||
#Filters ul li { |
|||
margin-left: -16px; |
|||
} |
|||
|
|||
#Filters ul img { |
|||
padding: 2px 4px; |
|||
vertical-align: middle; |
|||
width: 16px; |
|||
height: 16px; |
|||
} |
|||
|
|||
.selectedFilter { |
|||
background-color: #415A8D; |
|||
color: #FFFFFF; |
|||
} |
|||
|
|||
.selectedFilter a { |
|||
color: #FFFFFF; |
|||
} |
|||
|
|||
#properties { |
|||
background-color: #e5e5e5; |
|||
} |
|||
|
|||
a.propButton { |
|||
border: 1px solid rgb(85, 81, 91); |
|||
/*border-radius: 3px;*/ |
|||
padding: 2px; |
|||
margin-left: 3px; |
|||
margin-right: 3px; |
|||
} |
|||
|
|||
a.propButton img { |
|||
margin-bottom: -4px; |
|||
} |
|||
|
|||
.scrollableMenu { |
|||
overflow-y: auto; |
|||
overflow-x: hidden; |
|||
} |
|||
|
|||
/* context menu specific */ |
|||
|
|||
.contextMenu { |
|||
border: 1px solid #999; |
|||
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 { |
|||
display: block; |
|||
padding: 5px 20px 5px 5px; |
|||
font-size: 12px; |
|||
text-decoration: none; |
|||
font-family: tahoma, arial, sans-serif; |
|||
color: #000; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.contextMenu li a:hover { |
|||
background-color: #ddd; |
|||
} |
|||
|
|||
.contextMenu li a.disabled { |
|||
color: #ccc; |
|||
font-style: italic; |
|||
} |
|||
|
|||
.contextMenu li a.disabled:hover { |
|||
background-color: #eee; |
|||
} |
|||
|
|||
.contextMenu li ul { |
|||
padding: 0; |
|||
border: 1px solid #999; |
|||
padding: 0; |
|||
background: #eee; |
|||
list-style-type: none; |
|||
position: absolute; |
|||
left: -999em; |
|||
z-index: 8000; |
|||
margin: -29px 0 0 100%; |
|||
width: 164px; |
|||
} |
|||
|
|||
.contextMenu li ul li a { |
|||
position: relative; |
|||
} |
|||
|
|||
.contextMenu li a.arrow-right, .contextMenu li a:hover.arrow-right { |
|||
background-image: url(../images/arrow-right.gif); |
|||
background-repeat: no-repeat; |
|||
background-position: right center; |
|||
} |
|||
|
|||
.contextMenu li:hover ul, |
|||
.contextMenu li.ieHover ul, |
|||
.contextMenu li li.ieHover ul, |
|||
.contextMenu li li li.ieHover ul, |
|||
.contextMenu li li:hover ul, |
|||
.contextMenu li li li:hover ul { /* lists nested under hovered list items */ |
|||
left: auto; |
|||
} |
|||
|
|||
.contextMenu li img { |
|||
width: 16px; |
|||
height: 16px; |
|||
margin-bottom: -4px; |
|||
-ms-interpolation-mode: bicubic; |
|||
} |
|||
|
|||
.contextMenu li input[type=checkbox] { |
|||
position: relative; |
|||
top: 3px; |
|||
} |
|||
|
|||
/* Sliders */ |
|||
|
|||
.slider { |
|||
clear: both; |
|||
position: relative; |
|||
font-size: 12px; |
|||
font-weight: bold; |
|||
width: 400px; |
|||
margin-bottom: 15px; |
|||
} |
|||
|
|||
.sliderWrapper { |
|||
position: relative; |
|||
font-size: 1px; |
|||
line-height: 1px; |
|||
height: 9px; |
|||
width: 422px; |
|||
} |
|||
|
|||
.sliderarea { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
height: 7px; |
|||
width: 420px; |
|||
font-size: 1px; |
|||
line-height: 1px; |
|||
background: #f2f2f2 url(../images/slider-area.gif) repeat-x; |
|||
border: 1px solid #a3a3a3; |
|||
border-bottom: 1px solid #ccc; |
|||
border-left: 1px solid #ccc; |
|||
margin: 0; |
|||
padding: 0; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.sliderknob { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
height: 9px; |
|||
width: 19px; |
|||
font-size: 1px; |
|||
line-height: 1px; |
|||
background: url(../images/knob.gif) no-repeat; |
|||
cursor: pointer; |
|||
overflow: hidden; |
|||
z-index: 2; |
|||
} |
|||
|
|||
.update { |
|||
padding-bottom: 5px; |
|||
} |
|||
|
|||
.mochaToolButton { |
|||
margin-right: 10px; |
|||
} |
|||
|
|||
/* Mocha Customization */ |
|||
|
|||
#mochaToolbar { |
|||
margin-top: 5px; |
|||
position: relative; |
|||
height: 29px; |
|||
overflow-y: hidden; |
|||
} |
|||
|
|||
#mochaToolbar .divider { |
|||
background-image: url(../images/toolbox-divider.gif); |
|||
background-repeat: no-repeat; |
|||
background-position: left center; |
|||
padding-left: 14px; |
|||
padding-top: 15px; |
|||
} |
|||
|
|||
.MyMenuIcon { |
|||
margin-left: -18px; |
|||
margin-bottom: -3px; |
|||
padding-right: 5px; |
|||
} |
|||
|
|||
#mainWindowTabs { |
|||
float: right; |
|||
margin: 4px 5px 0 0; |
|||
} |
|||
|
|||
#torrentsFilterToolbar { |
|||
float: right; |
|||
margin-right: 30px; |
|||
} |
|||
|
|||
#torrentsFilterInput { |
|||
width: 160px; |
|||
padding-left: 2em; |
|||
background-image: url("../icons/edit-find.svg"); |
|||
background-repeat: no-repeat; |
|||
background-size: 1.5em; |
|||
background-position: left; |
|||
} |
|||
|
|||
#torrentFilesFilterToolbar { |
|||
float: right; |
|||
margin-right: 30px; |
|||
} |
|||
|
|||
#torrentFilesFilterInput { |
|||
width: 160px; |
|||
padding-left: 2em; |
|||
background-image: url("../icons/edit-find.svg"); |
|||
background-repeat: no-repeat; |
|||
background-size: 1.5em; |
|||
background-position: left; |
|||
} |
|||
|
|||
/* Tri-state checkbox */ |
|||
|
|||
label.tristate { |
|||
background: url(../images/3-state-checkbox.gif) 0 0 no-repeat; |
|||
display: block; |
|||
float: left; |
|||
height: 13px; |
|||
margin: .15em 8px 5px 0px; |
|||
overflow: hidden; |
|||
text-indent: -999em; |
|||
width: 13px; |
|||
} |
|||
|
|||
label.checked { |
|||
background-position: 0 -13px; |
|||
} |
|||
|
|||
label.partial { |
|||
background-position: 0 -26px; |
|||
} |
|||
|
|||
fieldset.settings { |
|||
border: solid 1px black; |
|||
border-radius: 8px; |
|||
-webkit-border-radius: 8px; |
|||
-moz-border-radius: 8px; |
|||
padding: 4px 4px 4px 10px; |
|||
} |
|||
|
|||
fieldset.settings legend { |
|||
margin-left: 8px; |
|||
padding: 4px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
fieldset.settings label { |
|||
padding: 2px; |
|||
} |
|||
|
|||
fieldset.settings + div.formRow { |
|||
margin-top: 10px; |
|||
} |
|||
|
|||
div.formRow { |
|||
clear: left; |
|||
display: block; |
|||
} |
|||
|
|||
.filterTitle { |
|||
font-weight: bold; |
|||
text-transform: uppercase; |
|||
padding-left: 5px; |
|||
padding-top: 5px; |
|||
display: block; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
} |
|||
|
|||
.filterTitle img { |
|||
width: 16px; |
|||
height: 16px; |
|||
margin-bottom: -3px; |
|||
padding: 0 5px; |
|||
} |
|||
|
|||
.filterTitle img.rotate { |
|||
transform: rotate(270deg); |
|||
} |
|||
|
|||
ul.filterList { |
|||
margin: 0 0 0 16px; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
ul.filterList a { |
|||
display: block; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
color: inherit; |
|||
} |
|||
|
|||
ul.filterList li:hover { |
|||
background-color: #e60; |
|||
} |
|||
|
|||
ul.filterList li:hover a { |
|||
color: white; |
|||
} |
|||
|
|||
td.generalLabel { |
|||
white-space: nowrap; |
|||
text-align: right; |
|||
width: 1px; |
|||
vertical-align: top; |
|||
} |
|||
|
|||
#torrentFilesTableDiv { |
|||
line-height: 20px; |
|||
} |
|||
|
|||
#torrentTrackersTableDiv, |
|||
#webseedsTable { |
|||
line-height: 25px; |
|||
} |
|||
|
|||
.filesTableCollapseIcon { |
|||
width: 15px; |
|||
height: 15px; |
|||
cursor: pointer; |
|||
margin-bottom: -3px; |
|||
padding-right: 5px; |
|||
} |
|||
|
|||
.filesTableCollapseIcon.rotate { |
|||
transform: rotate(270deg); |
|||
margin-bottom: -1px; |
|||
} |
|||
|
|||
.unselectable { |
|||
-webkit-touch-callout: none; |
|||
-webkit-user-select: none; |
|||
-khtml-user-select: none; |
|||
-moz-user-select: none; |
|||
-ms-user-select: none; |
|||
user-select: none; |
|||
} |
|||
|
|||
#prop_general { |
|||
padding: 2px; |
|||
} |
|||
|
|||
#watched_folders_tab { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
#watched_folders_tab td, #watched_folders_tab th { |
|||
padding: 2px 4px; |
|||
border: 1px solid black; |
|||
} |
|||
|
|||
.select-watched-folder-editable { |
|||
position: relative; |
|||
background-color: white; |
|||
border: solid grey 1px; |
|||
width: 160px; |
|||
height: 20px; |
|||
} |
|||
|
|||
.select-watched-folder-editable select { |
|||
position: absolute; |
|||
top: 0px; |
|||
bottom: 0px; |
|||
left: 0px; |
|||
border: none; |
|||
width: 160px; |
|||
margin: 0; |
|||
} |
|||
|
|||
.select-watched-folder-editable input { |
|||
position: absolute; |
|||
top: 0px; |
|||
left: 0px; |
|||
width: 140px; |
|||
padding: 1px; |
|||
border: none; |
|||
} |
|||
|
|||
.select-watched-folder-editable select:focus, .select-editable input:focus { |
|||
outline: none; |
|||
} |
|||
|
|||
/* |
|||
* Workaround to prevent the transfer list from |
|||
* disappearing when zooming in the browser. |
|||
*/ |
|||
#filtersColumn_handle { |
|||
margin-left: -1px; |
|||
} |
|||
|
|||
#error_div { |
|||
float: left; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.combo_priority { |
|||
font-size: 1em; |
|||
} |
|||
|
|||
td.statusBarSeparator { |
|||
width: 22px; |
|||
background-image: url('../images/toolbox-divider.gif'); |
|||
background-repeat: no-repeat; |
|||
background-position: center 1px; |
|||
background-size: 2px 18px; |
|||
} |
|||
|
|||
/* Statistics window */ |
|||
.statisticsValue { |
|||
text-align: right; |
|||
} |
|||
|
|||
/* Search tab */ |
|||
|
|||
#SearchPanel, #SearchPanel_wrapper, #SearchPanel_pad { |
|||
height: inherit; |
|||
} |
|||
|
|||
#searchResults { |
|||
padding: 0 20px; |
|||
height: 100%; |
|||
} |
|||
|
|||
#searchResultsTableContainer { |
|||
height: calc(100% - 140px); |
|||
-moz-height: calc(100% - 140px); |
|||
-webkit-height: calc(100% - 140px); |
|||
overflow: auto; |
|||
} |
|||
|
|||
#searchResultsTableDiv { |
|||
height: calc(100% - 26px) !important; |
|||
-moz-height: calc(100% - 26px) !important; |
|||
-webkit-height: calc(100% - 26px) !important; |
|||
} |
|||
|
|||
#searchResults .dynamicTable { |
|||
width: 100%; |
|||
} |
|||
|
|||
#searchResults .numSearchResults { |
|||
font-style: italic; |
|||
} |
|||
|
|||
.red { |
|||
color: red; |
|||
} |
|||
|
|||
.green { |
|||
color: green; |
|||
} |
|||
|
|||
.searchPluginsTableRow { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
#torrentFilesTableDiv .dynamicTable tr.nonAlt { |
|||
background-color: #fff; |
|||
} |
|||
|
|||
#torrentFilesTableDiv .dynamicTable tr.nonAlt.selected { |
|||
background-color: #354158; |
|||
color: #fff; |
|||
} |
|||
|
|||
#torrentFilesTableDiv .dynamicTable tr.nonAlt:hover { |
|||
background-color: #ee6600; |
|||
color: #fff; |
|||
} |
@ -0,0 +1,176 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Add Torrent Links)QBT_TR[CONTEXT=downloadFromURL]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<link rel="stylesheet" href="css/Window.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script src="scripts/download.js?v=${CACHEID}"></script> |
|||
<script src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script> |
|||
</head> |
|||
|
|||
<body> |
|||
<iframe id="download_frame" name="download_frame" class="invisible" src="about:blank"></iframe> |
|||
<form action="api/v2/torrents/add" enctype="multipart/form-data" method="post" id="downloadForm" style="text-align: center;" target="download_frame" autocorrect="off" autocapitalize="none"> |
|||
<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; margin-top: 6px;"> |
|||
<table style="margin: auto;"> |
|||
<tr> |
|||
<td> |
|||
<label for="autoTMM">QBT_TR(Torrent Management Mode:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label> |
|||
</td> |
|||
<td> |
|||
<select id="autoTMM" name="autoTMM" onchange="qBittorrent.Download.changeTMM(this)"> |
|||
<option selected value="false">Manual</option> |
|||
<option value="true">Automatic</option> |
|||
</select> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="savepath">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label> |
|||
</td> |
|||
<td> |
|||
<input type="text" id="savepath" name="savepath" style="width: 16em;" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="cookie">QBT_TR(Cookie:)QBT_TR[CONTEXT=HttpServer]</label> |
|||
</td> |
|||
<td> |
|||
<input type="text" id="cookie" name="cookie" style="width: 16em;" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="rename">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label> |
|||
</td> |
|||
<td> |
|||
<input type="text" id="rename" name="rename" style="width: 16em;" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="category">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label> |
|||
</td> |
|||
<td> |
|||
<div class="select-watched-folder-editable"> |
|||
<select id="categorySelect" onchange="qBittorrent.Download.changeCategorySelect(this)"> |
|||
<option selected value="\other"></option> |
|||
</select> |
|||
<input name="category" type="text" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="startTorrent">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label> |
|||
</td> |
|||
<td> |
|||
<input type="hidden" id="startTorrentHidden" name="paused" /> |
|||
<input type="checkbox" id="startTorrent" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="skip_checking">QBT_TR(Skip hash check)QBT_TR[CONTEXT=AddNewTorrentDialog]</label> |
|||
</td> |
|||
<td> |
|||
<input type="checkbox" id="skip_checking" name="skip_checking" value="true" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="contentLayout">QBT_TR(Content layout:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label> |
|||
</td> |
|||
<td> |
|||
<select id="contentLayout" name="contentLayout"> |
|||
<option selected value="Original">QBT_TR(Original)QBT_TR[CONTEXT=AddNewTorrentDialog]</option> |
|||
<option value="Subfolder">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</option> |
|||
<option value="NoSubfolder">QBT_TR(Don't create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</option> |
|||
</select> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="sequentialDownload">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label> |
|||
</td> |
|||
<td> |
|||
<input type="checkbox" id="sequentialDownload" name="sequentialDownload" value="true" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="firstLastPiecePrio">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label> |
|||
</td> |
|||
<td> |
|||
<input type="checkbox" id="firstLastPiecePrio" name="firstLastPiecePrio" value="true" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="dlLimitText">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label> |
|||
</td> |
|||
<td> |
|||
<input type="hidden" id="dlLimitHidden" name="dlLimit" /> |
|||
<input type="text" id="dlLimitText" style="width: 16em;" placeholder="KiB/s" /> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<label for="upLimitText">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label> |
|||
</td> |
|||
<td> |
|||
<input type="hidden" id="upLimitHidden" name="upLimit" /> |
|||
<input type="text" id="upLimitText" style="width: 16em;" placeholder="KiB/s" /> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
<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> |
|||
'use strict'; |
|||
|
|||
const encodedUrls = new URI().getData('urls'); |
|||
if (encodedUrls) { |
|||
const urls = encodedUrls.split('|').map(function(url) { |
|||
return decodeURIComponent(url); |
|||
}); |
|||
|
|||
if (urls.length) |
|||
$('urls').set('value', urls.join("\n")); |
|||
} |
|||
|
|||
let submitted = false; |
|||
|
|||
$('downloadForm').addEventListener("submit", function() { |
|||
$('startTorrentHidden').value = $('startTorrent').checked ? 'false' : 'true'; |
|||
|
|||
$('dlLimitHidden').value = $('dlLimitText').value.toInt() * 1024; |
|||
$('upLimitHidden').value = $('upLimitText').value.toInt() * 1024; |
|||
|
|||
$('download_spinner').style.display = "block"; |
|||
submitted = true; |
|||
}); |
|||
|
|||
$('download_frame').addEventListener("load", function() { |
|||
if (submitted) |
|||
window.parent.closeWindows(); |
|||
}); |
|||
</script> |
|||
<div id="download_spinner" class="mochaSpinner"></div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,87 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Torrent Download Speed Limiting)QBT_TR[CONTEXT=TransferListWidget]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<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/mocha-0.9.6-yc.js"></script> |
|||
<script src="scripts/speedslider.js?v=${CACHEID}"></script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="width: 100%; text-align: center; margin: 0 auto; overflow: hidden"> |
|||
<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 class="sliderWrapper"> |
|||
<div id="dllimitSliderknob" class="sliderknob"></div> |
|||
<div id="dllimitSliderarea" class="sliderarea"></div> |
|||
</div> |
|||
<div class="clear"></div> |
|||
</div> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
const hashes = new URI().getData('hashes').split('|'); |
|||
const setDlLimit = function() { |
|||
const limit = $("dllimitUpdatevalue").value.toInt() * 1024; |
|||
if (hashes[0] == "global") { |
|||
new Request({ |
|||
url: 'api/v2/transfer/setDownloadLimit', |
|||
method: 'post', |
|||
data: { |
|||
'limit': limit |
|||
}, |
|||
onComplete: function() { |
|||
window.parent.updateMainData(); |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
} |
|||
else { |
|||
new Request({ |
|||
url: 'api/v2/torrents/setDownloadLimit', |
|||
method: 'post', |
|||
data: { |
|||
'hashes': hashes.join('|'), |
|||
'limit': limit |
|||
}, |
|||
onComplete: function() { |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
} |
|||
} |
|||
</script> |
|||
<input type="button" id="applyButton" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="setDlLimit()" /> |
|||
</div> |
|||
|
|||
<script> |
|||
new Keyboard({ |
|||
defaultEventType: 'keydown', |
|||
events: { |
|||
'Enter': function(event) { |
|||
$('applyButton').click(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Escape': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Esc': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
} |
|||
} |
|||
}).activate(); |
|||
|
|||
$('dllimitUpdatevalue').focus(); |
|||
|
|||
MochaUI.addDlLimitSlider(hashes); |
|||
</script> |
|||
|
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,72 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="${LANG}"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<title>QBT_TR(Tracker editing)QBT_TR[CONTEXT=TrackerListWidget]</title> |
|||
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css" /> |
|||
<script src="scripts/lib/mootools-1.2-core-yc.js"></script> |
|||
<script src="scripts/lib/mootools-1.2-more.js"></script> |
|||
<script> |
|||
'use strict'; |
|||
|
|||
window.addEvent('domready', function() { |
|||
new Keyboard({ |
|||
defaultEventType: 'keydown', |
|||
events: { |
|||
'Enter': function(event) { |
|||
$('editTrackerButton').click(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Escape': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
}, |
|||
'Esc': function(event) { |
|||
window.parent.closeWindows(); |
|||
event.preventDefault(); |
|||
} |
|||
} |
|||
}).activate(); |
|||
|
|||
const currentUrl = new URI().getData('url'); |
|||
if (!currentUrl) |
|||
return false; |
|||
|
|||
const decodedUrl = decodeURIComponent(currentUrl); |
|||
$('trackerUrl').value = decodedUrl; |
|||
$('trackerUrl').focus(); |
|||
|
|||
$('editTrackerButton').addEvent('click', function(e) { |
|||
new Event(e).stop(); |
|||
const hash = new URI().getData('hash'); |
|||
new Request({ |
|||
url: 'api/v2/torrents/editTracker', |
|||
method: 'post', |
|||
data: { |
|||
hash: hash, |
|||
origUrl: decodedUrl, |
|||
newUrl: $('trackerUrl').value |
|||
}, |
|||
onComplete: function() { |
|||
window.parent.closeWindows(); |
|||
} |
|||
}).send(); |
|||
}); |
|||
}); |
|||
</script> |
|||
</head> |
|||
|
|||
<body> |
|||
<div style="text-align: center;"> |
|||
<br/> |
|||
<h2 class="vcenter">QBT_TR(Tracker URL:)QBT_TR[CONTEXT=TrackerListWidget]</h2> |
|||
<div style="text-align: center; padding-top: 10px;"> |
|||
<input id="trackerUrl" style="width: 90%;" /> |
|||
</div> |
|||
<br/> |
|||
<input type="button" value="QBT_TR(Edit)QBT_TR[CONTEXT=HttpServer]" id="editTrackerButton" /> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,12 @@ |
|||
# qBittorrent Icons |
|||
|
|||
Initial `qbt-theme` icons created by Bert Verhelst (<verhelstbert@gmail.com>). |
|||
|
|||
Icons are based on the `Font-Awesome` icon-set: [link](http://fontawesome.io/icons/). |
|||
|
|||
If you need to add an icon that qBittorrent does not already use, you can take an icon from the SVG fork of `Font-Awesome`: [link](https://github.com/encharm/Font-Awesome-SVG-PNG). |
|||
|
|||
|
|||
## Optimizing SVG |
|||
|
|||
Use [svgcleaner](https://github.com/RazrFalcon/svgcleaner) |
After Width: | Height: | Size: 478 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,22 @@ |
|||
module.exports = function(grunt) { |
|||
|
|||
grunt.initConfig({ |
|||
svg2png: { |
|||
all: { |
|||
options:{ |
|||
size: 256 |
|||
}, |
|||
files: [ |
|||
{ |
|||
src: ['icons/*.svg'] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
}); |
|||
|
|||
grunt.loadNpmTasks('grunt-svg2png'); |
|||
|
|||
grunt.registerTask('default', ['svg2png']); |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"name": "build-icons", |
|||
"version": "1.0.0", |
|||
"description": "Convert svg icons to png", |
|||
"main": "index.js", |
|||
"dependencies": {}, |
|||
"devDependencies": { |
|||
"grunt": "^0.4.5", |
|||
"grunt-svg2png": "git+https://git@github.com/bertyhell/grunt-svg2png.git" |
|||
}, |
|||
"author": "Bert Verhelst", |
|||
"license": "ISC" |
|||
} |
@ -0,0 +1,14 @@ |
|||
Convert SVG icons to PNG |
|||
------------------------ |
|||
|
|||
install npm |
|||
|
|||
Execute: |
|||
``` |
|||
npm install |
|||
``` |
|||
|
|||
Convert icons by running: |
|||
``` |
|||
grunt |
|||
``` |
After Width: | Height: | Size: 338 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 316 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 367 B |
After Width: | Height: | Size: 663 B |
After Width: | Height: | Size: 796 B |
After Width: | Height: | Size: 585 B |
After Width: | Height: | Size: 367 B |
After Width: | Height: | Size: 1013 B |
After Width: | Height: | Size: 801 B |
After Width: | Height: | Size: 453 B |
After Width: | Height: | Size: 817 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 732 B |
After Width: | Height: | Size: 711 B |
After Width: | Height: | Size: 293 B |
After Width: | Height: | Size: 311 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 805 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 478 B |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 780 B |
After Width: | Height: | Size: 782 B |
After Width: | Height: | Size: 928 B |
After Width: | Height: | Size: 425 B |
After Width: | Height: | Size: 189 B |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 682 B |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 231 B |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 703 B |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 201 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 215 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 475 B |
After Width: | Height: | Size: 469 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 580 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 254 B |
After Width: | Height: | Size: 332 B |
After Width: | Height: | Size: 250 B |
After Width: | Height: | Size: 279 B |
After Width: | Height: | Size: 1002 B |
After Width: | Height: | Size: 435 B |
After Width: | Height: | Size: 258 B |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 200 B |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 502 B |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 527 B |
After Width: | Height: | Size: 216 B |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 671 B |