(trunk web) refactor the preferences dialog into its own class. Make the prefs dialog invokable on iPhones/Androids (#1131) and add stop ratio functionality (#2006).

This commit is contained in:
Jordan Lee
2011-09-14 05:10:51 +00:00
parent f6579d58b2
commit 6b8a224059
18 changed files with 1053 additions and 1164 deletions

View File

@@ -1,6 +1,7 @@
datadir = ${datarootdir}/${PACKAGE_NAME}/${subdir}
dist_data_DATA = \
blue-turtle.png \
chrome.png \
filter_bar.png \
filter_icon.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -11,6 +11,7 @@
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all" />
<!--
<link media="screen" href="./stylesheets/mobile.css" type= "text/css" rel="stylesheet" />
-->
@@ -23,11 +24,11 @@
<!--[if IE 7]><link media="screen" href="./stylesheets/ie7.css" type="text/css" rel="stylesheet" /><![endif]-->
<script type="text/javascript" src="./javascript/jquery/jquery.transmenu.min.js"></script>
<script type="text/javascript" src="./javascript/jquery/jquery.contextmenu.min.js"></script>
<script type="text/javascript" src="./javascript/menu.js"></script>
<script type="text/javascript" src="./javascript/jquery/jquery.form.min.js"></script>
<script type="text/javascript" src="./javascript/jquery/json2.min.js"></script>
<script type="text/javascript" src="./javascript/common.js"></script>
<script type="text/javascript" src="./javascript/inspector.js"></script>
<script type="text/javascript" src="./javascript/prefs-dialog.js"></script>
<script type="text/javascript" src="./javascript/remote.js"></script>
<script type="text/javascript" src="./javascript/transmission.js"></script>
<script type="text/javascript" src="./javascript/torrent.js"></script>
@@ -69,6 +70,113 @@
</div>
</div>
<div id="prefs-dialog" style="display:none;">
<ul>
<li id="prefs-tab-general"><a href="#prefs-page-torrents">Torrents</a></li>
<li id="prefs-tab-speed"><a href="#prefs-page-speed">Speed</a></li>
<li id="prefs-tab-privacy"><a href="#prefs-page-privacy">Privacy</a></li>
<li id="prefs-tab-network"><a href="#prefs-page-network">Network</a></li>
<li class="ui-tab-dialog-close"></li>
</ul>
<div>
<div id="prefs-page-torrents">
<div class="prefs-section">
<div class="title">Downloading</div>
<div class="row"><div class="key">Download to:</div><div class="value"><input type="text" id="download-dir"/></div></div>
<div class="checkbox-row"><input type="checkbox" id="start-added-torrents"/><label for="start-added-torrents">Start when added</label></div>
<div class="checkbox-row"><input type="checkbox" id="rename-partial-files"/><label for="rename-partial-files">Append &quot;.part&quot; to incomplete files' names</label></div>
</div>
<div class="prefs-section">
<div class="title">Seeding</div>
<div class="row"><div class="key"><input type="checkbox" id="seedRatioLimited"/><label for="seedRatioLimited">Stop seeding at ratio:</label></div>
<div class="value"><input type="text" class="numberinput" id="seedRatioLimit"/></div></div>
<div class="row"><div class="key"><input type="checkbox" id="idle-seeding-limit-enabled"/><label for="idle-seeding-limit-enabled">Stop seeding if idle for N minutes:</label></div>
<div class="value"><input type="text" class="numberinput" id="idle-seeding-limit"/></div></div>
</div>
</div>
<div id="prefs-page-speed">
<div class="prefs-section">
<div class="title">Speed Limits</div>
<div class="row"><div class="key"><input type="checkbox" id="speed-limit-up-enabled"/><label for="speed-limit-up-enabled">Upload (kB/s):</label></div>
<div class="value"><input type="text" class="numberinput" id="speed-limit-up"/></div></div>
<div class="row"><div class="key"><input type="checkbox" id="speed-limit-down-enabled"/><label for="speed-limit-down-enabled">Download (kB/s):</label></div>
<div class="value"><input type="text" class="numberinput" id="speed-limit-down"/></div></div>
</div>
<div class="prefs-section">
<div class="title"><img src="images/graphics/blue-turtle.png" width="16" height="9" style="padding-right: 10px;"/>Alternative Speed Limits</div>
<div class="row" style="font-size: smaller; padding-bottom: 4px;">Override normal speed limits manually or at scheduled times</div>
<div class="row"><div class="key">Upload (kB/s):</div>
<div class="value"><input type="text" class="numberinput" id="alt-speed-up"/></div></div>
<div class="row"><div class="key">Download (kB/s):</div>
<div class="value"><input type="text" class="numberinput" id="alt-speed-down"/></div></div>
<div class="checkbox-row"><input type="checkbox" id="alt-speed-time-enabled"/><label for="alt-speed-time-enabled">Scheduled Times</label></div>
<div class="row"><div class="key">From:</div>
<div class="value"><select id="alt-speed-time-begin"></select></div></div>
<div class="row"><div class="key">To:</div>
<div class="value"><select id="alt-speed-time-end"></select></div></div>
<div class="row"><div class="key"><label for="alt-speed-time-day">On days:</label></div>
<div class="value"><select id="alt-speed-time-day">
<option value="127">Everyday</option>
<option value="62">Weekdays</option>
<option value="65">Weekends</option>
<option value="1">Sunday</option>
<option value="2">Monday</option>
<option value="4">Tuesday</option>
<option value="8">Wednesday</option>
<option value="16">Thursday</option>
<option value="32">Friday</option>
<option value="64">Saturday</option></select></div></div>
</div>
</div>
<div id="prefs-page-privacy">
<div class="prefs-section">
<div class="title">Blocklist</div>
<div class="row"><div class="key"><input type="checkbox" id="blocklist-enabled"/><label for="blocklist-enabled">Enable blocklist:</label></div>
<div class="value"><input type="text" id="blocklist-url"/></div></div>
<div class="row"><div class="key" style="margin-top: 3px; font-size: smaller;">Blocklist has <span id="blocklist-size">?</span> rules</div>
<div class="value"><input type="button" id="blocklist-update-button" value="Update"/></div></div>
</div>
<div class="prefs-section">
<div class="title">Privacy</div>
<div class="row"><div class="key">Encryption mode:</div>
<div class="value"><select id="encryption">
<option value="tolerated">Allow encryption</option>
<option value="preferred">Prefer encryption</option>
<option value="required">Require encryption</option></select></div></div>
<div class="checkbox-row"><input type="checkbox" id="pex-enabled" title="PEX is a tool for exchanging peer lists with the peers you're connected to."/>
<label for="pex-enabled" title="PEX is a tool for exchanging peer lists with the peers you're connected to.">Use PEX to find more peers</label></div>
<div class="checkbox-row"><input type="checkbox" id="dht-enabled" title="DHT is a tool for finding peers without a tracker."/>
<label for="dht-enabled" title="DHT is a tool for finding peers without a tracker.">Use DHT to find more peers</label></div>
<div class="checkbox-row"><input type="checkbox" id="lpd-enabled" title="LPD is a tool for finding peers on your local network."/>
<label for="lpd-enabled" title="LPD is a tool for finding peers on your local network.">Use LPD to find more peers</label></div>
</div>
</div>
<div id="prefs-page-network">
<div class="prefs-section">
<div class="title">Listening Port</div>
<div class="row"><div class="key"><label for="peer-port">Peer listening port:</div>
<div class="value"><input type="text" class="numberinput" id="peer-port"/></div></div>
<div class="row"><div class="key">&nbsp;</div>
<div class="value"><span id="port-label">Status: Unknown</span></div></div>
<div class="checkbox-row"><input type="checkbox" id="peer-port-random-on-start"/><label for="peer-port-random-on-start">Randomize port on launch</label></div>
<div class="checkbox-row"><input type="checkbox" id="port-forwarding-enabled"/><label for="port-forwarding-enabled">Use port forwarding from my router</label></div>
</div>
<div class="prefs-section">
<div class="title">Connections</div>
<div class="row"><div class="key"><label for="peer-limit-per-torrent">Max peers per torrent:</label></div>
<div class="value"><input type="text" class="numberinput" id="peer-limit-per-torrent"/></div></div>
<div class="row"><div class="key"><label for="peer-limit-global">Max peers overall:</label></div>
<div class="value"><input type="text" class="numberinput" id="peer-limit-global"/></div></div>
</div>
<div class="prefs-section">
<div class="title">Options</div>
<div class="checkbox-row"><input type="checkbox" id="utp-enabled" title="uTP is a tool for reducing network congestion."/>
<label for="utp-enabled" title="uTP is a tool for reducing network congestion.">Enable uTP for peer communication</label></div>
</div>
</div>
</div>
</div>
<div id="torrent_inspector" style="display:none;">
<div style="display:none;" class="inspector_close" id="inspector_close"><img id="inspector_close_image" src="./images/buttons/cancel.png"/></div>
@@ -223,180 +331,6 @@
</div>
</div>
<div class="dialog_container" id="prefs_container" style="display:none;">
<div class="dialog_top_bar"></div>
<div class="dialog_window">
<h2 class="dialog_heading">Preferences</h2>
<div id="pref_error"></div>
<form action="" id="prefs_form">
<div id="prefs_tabs">
<ul>
<li id="prefs-tab-general" class="prefs-tab selected">General</li>
<li id="prefs-tab-speed" class="prefs-tab">Speed</li>
<li id="prefs-tab-peers" class="prefs-tab">Peers</li>
<li id="prefs-tab-network" class="prefs-tab">Network</li>
</ul>
<div id="prefs-page-general" class="prefs-page">
<div class="preference download_location">
<label class="category">Add transfers:</label>
<div class="formdiv">
<label for="download_location" class="item">Download to:</label>
<input type="text" name="download_location" id="download_location"/>
</div>
<div class="formdiv checkbox auto_start">
<input type="checkbox" name="auto_start" id="auto_start"/>
<label for="auto_start" class="item">Start transfers when added</label>
</div>
</div>
<div class="preference encryption">
<label class="category">Encryption:</label>
<div class="formdiv checkbox">
<input type="checkbox" name="encryption" id="encryption"/>
<label for="encryption" class="item">Ignore unencrypted peers</label>
</div>
</div>
<div class="preference web_gui">
<label class="category">Web Client:</label>
<div class="formdiv">
<label for="refresh_rate" class="item">Refresh Rate:</label>
<input type="text" name="refresh_rate" id="refresh_rate" class="numberinput"/>
<label class="suffix">seconds</label>
</div>
</div>
<div style="clear: both; visibility: hidden;"></div>
</div>
<div id="prefs-page-speed" class="prefs-page" style="display: none;">
<div class="preference limit_total">
<label class="category">Speed Limits:</label>
<div class="formdiv checkbox">
<input type="checkbox" name="limit_download" id="limit_download"/>
<label for="limit_download" class="item">Download Rate:</label>
<input type="text" name="download_rate" id="download_rate" class="numberinput"/>
<label class="suffix">kB/s</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="limit_upload" id="limit_upload"/>
<label for="limit_upload" class="item">Upload Rate:</label>
<input type="text" name="upload_rate" id="upload_rate" class="numberinput"/>
<label class="suffix">kB/s</label>
</div>
</div>
<div class="preference limit_turtle">
<label class="category">Temporary Speed Limits: (Turtle)</label>
<label>Override normal speed limits manually or at scheduled times</label>
<div class="formdiv">
<label for="turtle_download_rate" class="item">Download Rate:</label>
<input type="text" name="turtle_download_rate" id="turtle_download_rate" class="numberinput"/>
<label class="suffix">kB/s</label>
</div>
<div class="formdiv">
<label for="turtle_upload_rate" class="item">Upload Rate:</label>
<input type="text" name="turtle_upload_rate" id="turtle_upload_rate" class="numberinput"/>
<label class="suffix">kB/s</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="turtle_schedule" id="turtle_schedule"/>
<label for="turtle_schedule" class="item">Scheduled times:</label>
<select name="turtle_start_time" id="turtle_start_time" size="1">
</select>
<select name="turtle_end_time" id="turtle_end_time" size="1">
</select>
</div>
<div class="formdiv">
<label for="turtle_days" class="item">On days:</label>
<select name="turtle_days" id="turtle_days" size="1">
<option value="127">Everyday</option>
<option value="62">Weekdays</option>
<option value="65">Weekends</option>
<option value="1">Sunday</option>
<option value="2">Monday</option>
<option value="4">Tuesday</option>
<option value="8">Wednesday</option>
<option value="16">Thursday</option>
<option value="32">Friday</option>
<option value="64">Saturday</option>
</select>
</div>
</div>
<div style="clear: both; visibility: hidden;"></div>
</div>
<div id="prefs-page-peers" class="prefs-page" style="display: none;">
<div class="preference peers_conn">
<label class="category">Connections:</label>
<div class="formdiv">
<label for="conn_global" class="item">Global maximum connections:</label>
<input type="text" name="conn_global" id="conn_global" class="numberinput"/>
<label class="suffix">peers</label>
</div>
<div class="formdiv">
<label for="conn_torrent" class="item">Maximum connections for new transfers:</label>
<input type="text" name="conn_torrent" id="conn_torrent" class="numberinput"/>
<label class="suffix">peers</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="conn_pex" id="conn_pex"/>
<label for="conn_pex" class="item">Use peer exchange (PEX) for public torrents</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="conn_dht" id="conn_dht"/>
<label for="conn_dht" class="item">Use distributed hash table (DHT) for public torrents</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="conn_lpd" id="conn_lpd"/>
<label for="conn_lpd" class="item">Use local peer discovery for public torrents</label>
</div>
</div>
<div class="preference block_conn">
<label class="category">Blocklist:</label>
<div class="formdiv checkbox">
<input type="checkbox" name="block_enable" id="block_enable"/>
<label for="block_enable" class="item">Prevent peers in blocklist from connecting</label>
</div>
<div class="formdiv block_url">
<label for="block_url" class="item">URL:</label>
<input type="text" name="block_url" id="block_url"/>
</div>
<div class="formdiv">
<input type="button" name="block_update_button" id="block_update_button" value="Update"/>
<label class="suffix" id="block_size">IP rules in the list</label>
</div>
</div>
<div style="clear: both; visibility: hidden;"></div>
</div>
<div id="prefs-page-network" class="prefs-page" style="display: none;">
<div class="preference utp">
<label class="category">Peer communication:</label>
<div class="formdiv checkbox">
<input type="checkbox" name="network_utp" id="network_utp"/>
<label for="network_utp" class="item">Enable Micro Transport Protocol (µTP)</label>
</div>
</div>
<div class="preference port">
<label class="category">Peer listening port:</label>
<div class="formdiv">
<label for="port" class="item">Incoming TCP Port:</label>
<input type="text" id="port" name="port" class="numberinput"/>
<label class="suffix" id="port_test"></label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="port_rand" id="port_rand"/>
<label for="port_rand" class="item">Randomize port on launch</label>
</div>
<div class="formdiv checkbox">
<input type="checkbox" name="port_forward" id="port_forward"/>
<label for="port_forward" class="item">Automatically map port</label>
</div>
</div>
<div style="clear: both; visibility: hidden;"></div>
</div>
</div>
<span id="transmission_version"></span>
<a href="#save" id="prefs_save_button">Save</a>
<a href="#cancel" id="prefs_cancel_button">Cancel</a>
</form>
</div>
</div>
<div class="dialog_container" id="stats_container" style="display:none;">
<div class="dialog_top_bar"></div>
<div class="dialog_window">
@@ -486,19 +420,19 @@
<li id="unlimited_download_rate">Unlimited</li>
<li id="limited_download_rate">Limit (10 kB/s)</li>
<li class="separator"></li>
<li>5 kB/s</li>
<li>10 kB/s</li>
<li>20 kB/s</li>
<li>30 kB/s</li>
<li>40 kB/s</li>
<li>50 kB/s</li>
<li>75 kB/s</li>
<li>100 kB/s</li>
<li>150 kB/s</li>
<li>200 kB/s</li>
<li>250 kB/s</li>
<li>500 kB/s</li>
<li>750 kB/s</li>
<li class='download-speed'>5 kB/s</li>
<li class='download-speed'>10 kB/s</li>
<li class='download-speed'>20 kB/s</li>
<li class='download-speed'>30 kB/s</li>
<li class='download-speed'>40 kB/s</li>
<li class='download-speed'>50 kB/s</li>
<li class='download-speed'>75 kB/s</li>
<li class='download-speed'>100 kB/s</li>
<li class='download-speed'>150 kB/s</li>
<li class='download-speed'>200 kB/s</li>
<li class='download-speed'>250 kB/s</li>
<li class='download-speed'>500 kB/s</li>
<li class='download-speed'>750 kB/s</li>
</ul>
</li>
<li>Total Upload Rate
@@ -506,31 +440,31 @@
<li id="unlimited_upload_rate">Unlimited</li>
<li id="limited_upload_rate">Limit (10 kB/s)</li>
<li class="separator"></li>
<li>5 kB/s</li>
<li>10 kB/s</li>
<li>20 kB/s</li>
<li>30 kB/s</li>
<li>40 kB/s</li>
<li>50 kB/s</li>
<li>75 kB/s</li>
<li>100 kB/s</li>
<li>150 kB/s</li>
<li>200 kB/s</li>
<li>250 kB/s</li>
<li>500 kB/s</li>
<li>750 kB/s</li>
<li class='upload-speed'>5 kB/s</li>
<li class='upload-speed'>10 kB/s</li>
<li class='upload-speed'>20 kB/s</li>
<li class='upload-speed'>30 kB/s</li>
<li class='upload-speed'>40 kB/s</li>
<li class='upload-speed'>50 kB/s</li>
<li class='upload-speed'>75 kB/s</li>
<li class='upload-speed'>100 kB/s</li>
<li class='upload-speed'>150 kB/s</li>
<li class='upload-speed'>200 kB/s</li>
<li class='upload-speed'>250 kB/s</li>
<li class='upload-speed'>500 kB/s</li>
<li class='upload-speed'>750 kB/s</li>
</ul>
</li>
<li class="separator"></li>
<li>Sort Transfers By
<ul id="footer_sort_menu">
<li id="sort_by_activity">Activity</li>
<li id="sort_by_age">Age</li>
<li id="sort_by_name">Name</li>
<li id="sort_by_percent_completed">Progress</li>
<li id="sort_by_ratio">Ratio</li>
<li id="sort_by_queue_order">Queue Order</li>
<li id="sort_by_state">State</li>
<li class='sort-mode' id="sort_by_activity">Activity</li>
<li class='sort-mode' id="sort_by_age">Age</li>
<li class='sort-mode' id="sort_by_name">Name</li>
<li class='sort-mode' id="sort_by_percent_completed">Progress</li>
<li class='sort-mode' id="sort_by_ratio">Ratio</li>
<li class='sort-mode' id="sort_by_queue_order">Queue Order</li>
<li class='sort-mode' id="sort_by_state">State</li>
<li class="separator"></li>
<li id="reverse_sort_order">Reverse Sort Order</li>
</ul>
@@ -538,6 +472,7 @@
</ul>
</li>
</ul>
<div id="prefs-button">&nbsp;</div>
<div id="turtle-button">&nbsp;</div>
<div id="compact-button">&nbsp;</div>
</div>

View File

@@ -6,7 +6,7 @@ dist_data_DATA = \
file-row.js \
formatter.js \
inspector.js \
menu.js \
prefs-dialog.js \
remote.js \
torrent.js \
torrent-row.js \

View File

@@ -1,9 +1,8 @@
/*
* Copyright © Dave Perrett and Malcolm Jarvis
* This code is licensed under the GPL version 2.
* For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
/**
* Copyright © Dave Perrett and Malcolm Jarvis
*
* Common javascript
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
var transmission,
@@ -21,6 +20,19 @@ if (!Array.indexOf){
}
}
// http://forum.jquery.com/topic/combining-ui-dialog-and-tabs
$.fn.tabbedDialog = function (dialog_opts) {
this.tabs({selected: 0});
this.dialog(dialog_opts);
this.find('.ui-tab-dialog-close').append(this.parent().find('.ui-dialog-titlebar-close'));
this.find('.ui-tab-dialog-close').css({'position':'absolute','right':'0', 'top':'16px'});
this.find('.ui-tab-dialog-close > a').css({'float':'none','padding':'0'});
var tabul = this.find('ul:first');
this.parent().addClass('ui-tabs').prepend(tabul).draggable('option','handle',tabul);
this.siblings('.ui-dialog-titlebar').remove();
tabul.addClass('ui-dialog-titlebar');
}
$(document).ready(function() {
// Initialise the dialog controller
dialog = new Dialog();
@@ -58,15 +70,6 @@ $(document).ready(function() {
}
});
/*
* Return a copy of the array
*
* @returns array
*/
Array.prototype.clone = function () {
return this.concat();
};
/**
* "innerHTML = html" is pretty slow in FF. Happily a lot of our innerHTML
* changes are triggered by periodic refreshes on torrents whose state hasn't
@@ -100,27 +103,19 @@ Math.ratio = function(numerator, denominator) {
return result;
};
/*
* Truncate a float to a specified number of decimal
* places, stripping trailing zeroes
*
* @param float floatnum
* @param integer precision
* @returns float
*/
Math.truncateWithPrecision = function(floatnum, precision) {
return Math.floor(floatnum * Math.pow (10, precision)) / Math.pow(10, precision);
};
/*
* Round a string of a number to a specified number of decimal
* places
/**
* Round a string of a number to a specified number of decimal places
*/
Number.prototype.toTruncFixed = function(place) {
var ret = Math.truncateWithPrecision(this, place);
var ret = Math.floor(this * Math.pow (10, place)) / Math.pow(10, place);
return ret.toFixed(place);
}
Number.prototype.toStringWithCommas = function() {
return this.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
/*
* Trim whitespace from a string
*/
@@ -136,7 +131,6 @@ function Prefs() { }
Prefs.prototype = { };
Prefs._RefreshRate = 'refresh_rate';
Prefs._SessionRefreshRate = 'session_refresh_rate';
Prefs._FilterMode = 'filter';
Prefs._FilterAll = 'all';
@@ -159,7 +153,6 @@ Prefs._SortByProgress = 'percent_completed';
Prefs._SortByRatio = 'ratio';
Prefs._SortByState = 'state';
Prefs._TurtleState = 'turtle-state';
Prefs._CompactDisplayState= 'compact_display_state';
Prefs._Defaults =

View File

@@ -1,9 +1,8 @@
/*
* Copyright © Dave Perrett and Malcolm Jarvis
* This code is licensed under the GPL version 2.
* For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
/**
* Copyright © Dave Perrett and Malcolm Jarvis
*
* Class Dialog
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
function Dialog(){

View File

@@ -1,7 +1,8 @@
/*
* Copyright © Jordan Lee
* This code is licensed under the GPL version 2.
* <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
/**
* Copyright © Mnemosyne LLC
*
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
function FileRow(torrent, i)

View File

@@ -1,9 +1,9 @@
/**
*** This file Copyright (C) Mnemosyne LLC
***
*** This code is licensed under the GPL version 2.
*** For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
**/
* Copyright © Mnemosyne LLC
*
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
Transmission.fmt = (function()
{

View File

@@ -1,7 +1,8 @@
/*
/**
* Copyright © Jordan Lee, Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
* This code is licensed under the GPL version 2.
* For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
function Inspector(controller) {

View File

@@ -1,45 +0,0 @@
/*
* Copyright © Dave Perrett and Malcolm Jarvis
* This code is licensed under the GPL version 2.
* For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Menu Configuration Properties
*/
Menu = {
context: {
menu_style: {
width: '310px',
backgroundColor: '#fff',
border: 'none',
padding: '5px 0',
textAlign: 'left'},
item_style: {
backgroundColor: 'transparent',
margin: '0',
padding: '0 10px 2px 20px',
color: '#000',
fontSize: '14px',
cursor: 'default',
border: 'none'},
item_hover_style: {
backgroundColor: '#24e',
color: '#fff',
border: 'none'},
item_disabled_style: {
backgroundColor: 'transparent',
margin: '0',
padding: '0 10px 2px 20px',
color: '#aaa',
fontSize: '1.5em',
cursor: 'default',
border: 'none'}
}
}

View File

@@ -0,0 +1,309 @@
/**
* Copyright © Jordan Lee, Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
*
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
function PrefsDialog(remote) {
var data = {
dialog: null,
remote: null,
elements: { },
// all the RPC session keys that we have gui controls for
keys: [
'alt-speed-down',
'alt-speed-time-begin',
'alt-speed-time-day',
'alt-speed-time-enabled',
'alt-speed-time-end',
'alt-speed-up',
'blocklist-enabled',
'blocklist-size',
'blocklist-url',
'dht-enabled',
'download-dir',
'encryption',
'idle-seeding-limit',
'idle-seeding-limit-enabled',
'lpd-enabled',
'peer-limit-global',
'peer-limit-per-torrent',
'peer-port',
'peer-port-random-on-start',
'pex-enabled',
'port-forwarding-enabled',
'rename-partial-files',
'seedRatioLimit',
'seedRatioLimited',
'speed-limit-down',
'speed-limit-down-enabled',
'speed-limit-up',
'speed-limit-up-enabled',
'start-added-torrents',
'utp-enabled'
],
// map of keys that are enabled only if a 'parent' key is enabled
groups: {
'alt-speed-time-enabled': ['alt-speed-time-begin',
'alt-speed-time-day',
'alt-speed-time-end' ],
'blocklist-enabled': ['blocklist-url',
'blocklist-update-button' ],
'idle-seeding-limit-enabled': [ 'idle-seeding-limit' ],
'seedRatioLimited': [ 'seedRatioLimit' ],
'speed-limit-down-enabled': [ 'speed-limit-down' ],
'speed-limit-up-enabled': [ 'speed-limit-up' ]
}
},
initTimeDropDown = function(e)
{
var i, hour, mins, value, content;
for (i=0; i<24*4; ++i) {
hour = parseInt(i/4, 10);
mins = ((i%4) * 15);
value = i * 15;
content = hour + ':' + (mins || '00');
e.options[i] = new Option(content, value);
}
},
onPortChecked = function(response)
{
var is_open = response['arguments']['port-is-open'],
text = 'Port is <b>' + (is_open ? 'Open' : 'Closed') + '</b>',
e = data.elements.root.find('#port-label');
setInnerHTML(e[0],text);
},
setGroupEnabled = function(parent_key, enabled)
{
var i, key, keys, root;
if (parent_key in data.groups)
{
root = data.elements.root,
keys = data.groups[parent_key];
for (i=0; key=keys[i]; ++i)
root.find('#'+key).attr('disabled',!enabled);
}
},
onBlocklistUpdateClicked = function ()
{
data.remote.updateBlocklist();
setBlocklistButtonEnabled(false);
},
setBlocklistButtonEnabled = function(b)
{
var e = data.elements.blocklist_button;
e.attr('disabled',!b);
e.val(b ? 'Update' : 'Updating...');
},
getValue = function(e)
{
var str;
switch (e[0].type)
{
case 'checkbox':
case 'radio':
return e.prop('checked');
case 'text':
case 'select-one':
str = e.val();
if( parseInt(str,10).toString() === str)
return parseInt(str,10);
if( parseFloat(str).toString() === str)
return parseFloat(str);
return str;
default:
return null;
}
},
/* this callback is for controls whose changes can be applied
immediately, like checkboxs, radioboxes, and selects */
onControlChanged = function(ev)
{
var o = {};
o[ev.target.id] = getValue($(ev.target));
data.remote.savePrefs(o);
},
/* these two callbacks are for controls whose changes can't be applied
immediately -- like a text entry field -- because it takes many
change events for the user to get to the desired result */
onControlFocused = function(ev)
{
data.oldValue = getValue($(ev.target));
},
onControlBlurred = function(ev)
{
var newValue = getValue($(ev.target));
if (newValue !== data.oldValue)
{
var o = {};
o[ev.target.id] = newValue;
data.remote.savePrefs(o);
delete data.oldValue;
}
},
getDefaultMobileOptions = function()
{
return {
width: $(window).width(),
height: $(window).height(),
position: [ 'left', 'top' ],
resizable: false,
draggable: false
};
},
initialize = function (remote)
{
var i, key, e, o;
data.remote = remote;
e = $('#prefs-dialog');
data.elements.root = e;
initTimeDropDown(e.find('#alt-speed-time-begin')[0]);
initTimeDropDown(e.find('#alt-speed-time-end')[0]);
o = isMobileDevice
? getDefaultMobileOptions()
: { width: 350, height: 400 };
o.autoOpen = false;
o.show = 'fade';
o.hide = 'fade';
o.close = onDialogClosed;
e.tabbedDialog(o);
e = e.find('#blocklist-update-button');
data.elements.blocklist_button = e;
e.click(onBlocklistUpdateClicked);
// listen for user input
for (i=0; key=data.keys[i]; ++i)
{
e = data.elements.root.find('#'+key);
switch (e[0].type)
{
case 'checkbox':
case 'radio':
case 'select-one':
e.change(onControlChanged);
break;
case 'text':
e.focus(onControlFocused);
e.blur(onControlBlurred);
default:
break;
}
}
// handle orientation changes...
var supportsOrientationChange = 'onorientationchange' in window,
orientationEvent = supportsOrientationChange ? 'orientationchange' : 'resize';
$('body').bind(orientationEvent, function() {
data.elements.root.dialog('option',getDefaultMobileOptions());
});
},
getValues = function()
{
var i, key, val, o={},
keys = data.keys,
root = data.elements.root;
for (i=0; key=keys[i]; ++i) {
val = getValue(root.find('#'+key));
if (val !== null)
o[key] = val;
}
return o;
},
onDialogClosed = function()
{
window.scrollTo(0,1);
$(data.dialog).trigger('closed', getValues());
};
/****
***** PUBLIC FUNCTIONS
****/
// update the dialog's controls
this.set = function (o)
{
var e, i, key, val, option,
keys = data.keys,
root = data.elements.root;
setBlocklistButtonEnabled(true);
for (i=0; key=keys[i]; ++i)
{
val = o[key];
e = root.find('#'+key);
if (key === 'blocklist-size')
{
// special case -- regular text area
e.text('' + val.toStringWithCommas());
}
else switch (e[0].type)
{
case 'checkbox':
case 'radio':
e.prop('checked', val);
setGroupEnabled(key, val);
break;
case 'text':
// don't change the text if the user's editing it.
// it's very annoying when that happens!
if (e[0] !== document.activeElement)
e.val(val);
break;
case 'select-one':
e.val(val);
break;
default:
break;
}
}
};
this.show = function ()
{
window.scrollTo(0,1);
setBlocklistButtonEnabled(true);
data.remote.checkPort(onPortChecked,this);
data.elements.root.dialog('open');
};
this.shouldAddedTorrentsStart = function()
{
return data.elements.root.find('#start-added-torrents')[0].checked;
};
data.dialog = this;
initialize (remote);
};

View File

@@ -1,46 +1,24 @@
/*
* Copyright © Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
* This code is licensed under the GPL version 2.
* For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
/**
* Copyright © Jordan Lee, Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
*
* Class TransmissionRemote
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
var RPC = {
_Root : '../rpc',
_DaemonVersion : 'version',
_Encryption : 'encryption',
_EncryptionPreferred : 'preferred',
_EncryptionRequired : 'required',
_UpSpeedLimit : 'speed-limit-up',
_DownSpeedLimit : 'speed-limit-down',
_DownloadDir : 'download-dir',
_PeerPort : 'peer-port',
_UpSpeedLimited : 'speed-limit-up-enabled',
_DownSpeedLimited : 'speed-limit-down-enabled',
_TurtleState : 'alt-speed-enabled',
_TurtleUpSpeedLimit : 'alt-speed-up',
_TurtleDownSpeedLimit : 'alt-speed-down',
_TurtleTimeEnabled : 'alt-speed-time-enabled',
_TurtleTimeBegin : 'alt-speed-time-begin',
_TurtleTimeEnd : 'alt-speed-time-end',
_TurtleTimeDay : 'alt-speed-time-day',
_PeerLimitGlobal : 'peer-limit-global',
_PeerLimitPerTorrent : 'peer-limit-per-torrent',
_PexEnabled : 'pex-enabled',
_DhtEnabled : 'dht-enabled',
_LpdEnabled : 'lpd-enabled',
_BlocklistEnabled : 'blocklist-enabled',
_BlocklistURL : 'blocklist-url',
_BlocklistSize : 'blocklist-size',
_UtpEnabled : 'utp-enabled',
_PeerPortRandom : 'peer-port-random-on-start',
_PortForwardingEnabled : 'port-forwarding-enabled',
_StartAddedTorrent : 'start-added-torrents',
_QueueMoveTop : 'queue-move-top',
_QueueMoveBottom : 'queue-move-bottom',
_QueueMoveUp : 'queue-move-up',
_QueueMoveDown : 'queue-move-down'
_QueueMoveDown : 'queue-move-down',
_Root : '../rpc',
_TurtleDownSpeedLimit : 'alt-speed-down',
_TurtleState : 'alt-speed-enabled',
_TurtleUpSpeedLimit : 'alt-speed-up',
_UpSpeedLimit : 'speed-limit-up',
_UpSpeedLimited : 'speed-limit-up-enabled'
};
function TransmissionRemote(controller)

View File

@@ -1,14 +1,10 @@
/*
* Copyright © Jordan Lee
* This code is licensed under the GPL version 2.
* <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
/**
* Copyright © Mnemosyne LLC
*
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
/****
*****
*****
****/
function TorrentRendererHelper()
{
}

View File

@@ -1,12 +1,10 @@
/*
* Copyright © Jordan Lee, Dave Perrett and Malcolm Jarvis
* This code is licensed under the GPL version 2.
* For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
/**
* Copyright © Mnemosyne LLC
*
* Class Torrent
* This file is licensed under the GPLv2.
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
function Torrent(data)
{
this.initialize(data);

File diff suppressed because it is too large Load Diff

View File

@@ -50,20 +50,12 @@ a {
width: 100%;
height: 75px;
margin: 0;
border: 1px outset #AEBBCB;
border: 1px outset #AEBBCB;
overflow: hidden;
-moz-user-select: none;
-webkit-user-select: none;
}
#toolbar h1 {
height: inherit;
width: 205px;
text-indent: -9000px !important;
padding: 0;
margin: 0 0 0 5px;
}
#toolbar ul {
height: 50px;
margin: 0;
@@ -214,7 +206,6 @@ div#filter-popup #filter-by-state .row .filter-name {
left: 0px;
}
#filter-popup .row {
font-size: 1.2em;
text-align: left;
cursor: pointer;
margin: 8px 2px;
@@ -484,6 +475,49 @@ li.torrent a:active div.torrent_resume {
background-position: center bottom;
}
/***
****
**** PREFERENCES
****
***/
#prefs-dialog.ui-tabs .ui-tabs-panel {
padding: 0px;
-moz-user-select: none;
-webkit-user-select: none;
}
.prefs-section {
margin: 10px;
text-align: left;
}
.prefs-section > * {
padding-top: 8px;
padding-left: 8px;
}
.prefs-section .title {
font-weight: bold;
padding-left: 0px;
}
.prefs-section .row .key {
float: left;
padding-top: 3px;
}
.prefs-section .row .key > * {
margin-left: 0px;
}
.prefs-section .row .value {
margin-left: 150px;
}
.prefs-section .row .value > * {
width: 100%;
}
.prefs-section .checkbox-row > input {
margin: 0px;
}
.prefs-section .checkbox-row > label {
margin-left: 5px;
}
/*--------------------------------------
*
* T O R R E N T I N S P E C T O R
@@ -866,11 +900,12 @@ li.inspector_torrent_file_list_entry.complete div.file_priority_control {
cursor: default;
}
/*--------------------------------------
*
* T O R R E N T F O O T E R
*
*--------------------------------------*/
/****
*****
***** MAIN WINDOW FOOTER
*****
****/
div.torrent_footer {
height: 22px;
@@ -900,48 +935,51 @@ div.torrent_footer ul#settings_menu li#button {
padding: 0;
position: relative;
}
div.torrent_footer ul#settings_menu li#button:active,
div.torrent_footer ul#settings_menu li#button:hover {
div.torrent_footer ul#settings_menu li#button:hover,
div.torrent_footer ul#settings_menu li#button:active {
background-position: -32px top;
}
#turtle-button {
background: transparent url('../images/graphics/chrome.png') left -18px no-repeat;
}
#turtle-button:active,
#turtle-button:hover {
#turtle-button:hover,
#turtle-button:active {
background-position: -32px -18px;
}
#turtle-button.enabled {
background-position: left -36px;
}
#turtle-button.enabled:active,
#turtle-button.enabled:hover {
#turtle-button.enabled:hover,
#turtle-button.enabled:active {
background-position: -32px -36px;
}
#compact-button {
background: transparent url('../images/graphics/chrome.png') left -54px no-repeat;
background: transparent url('../images/graphics/chrome.png') left -54px no-repeat;
}
#compact-button:active,
#compact-button:hover {
#compact-button:hover,
#compact-button:active {
background-position: -32px -54px;
}
#compact-button.enabled {
background-position: left -72px;
}
#compact-button.enabled:active,
#compact-button.enabled:hover {
#compact-button.enabled:hover,
#compact-button.enabled:active {
background-position: -32px -72px;
}
#prefs-button {
display: none;
}
/*--------------------------------------
*
* D I A L O G S
*
*--------------------------------------*/
/****
*****
***** DIALOGS
*****
****/
div.dialog_container {
position: absolute;
@@ -1073,114 +1111,6 @@ iframe#torrent_upload_frame {
margin: 0;
}
div#prefs_container label {
display: block;
margin: 0 0 0 2px;
}
div#prefs_container label.category {
clear: both;
font-size: 1.2em;
}
div#prefs_container label.item {
font-size: 11px !important;
margin: 0 5px 0 20px;
float: left;
}
div#prefs_container label.suffix {
margin: 0 5px 0 10px;
float: left;
}
div#prefs_container div.formdiv.checkbox label.item {
margin: 0 5px 0 2px;
}
div#prefs_container div.limit_total label.item {
width: 102px;
}
div#prefs_container div.limit_turtle label.item {
width: 120px;
}
div#prefs_container div.preference input[type=checkbox] {
float: left;
margin-left: 20px;
margin-top: 9px;
}
@-moz-document url-prefix() {
div#prefs_container div.preference input[type=checkbox] {
margin-top: 8px;
}
}
div#prefs_container div.preference input[type=text] {
width: 50px;
padding: 0px !important;
height: 18px;
margin-top: 2px;
}
div#prefs_container div.preference input {
float: left;
}
div#prefs_container div.block_url input {
width: 256px !important;
}
div#prefs_container div.download_location input {
width: 256px !important;
}
div#prefs_container div.download_location .checkbox input {
width: auto !important;
}
div#prefs_container div.formdiv {
clear: both;
line-height: 30px;
}
div#prefs_container a {
clear: left;
margin: 10px 5px 10px 7px;
}
div#prefs_container h2.dialog_heading {
display: none;
}
div#prefs_container div#prefs_tabs {
clear: both;
}
div#prefs_container div#prefs_tabs ul {
margin: 0;
padding: 0 0 0 10px;
}
.prefs-tab {
cursor: pointer;
display: block;
float: left;
font-size: 1.2em;
color: #323232;
text-align: center;
padding: 2px 20px;
border: 1px solid #787878;
margin-bottom: -1px;
background: #C0C8D6 url('../images/graphics/filter_bar.png') bottom repeat-x;
}
.prefs-tab.selected {
background: none;
border-bottom: 1px solid #efefef;
}
.prefs-page {
border-top: 1px solid #787878;
clear: both;
padding: 7px;
}
div#stats_container h2.dialog_heading {
display: none;
}
@@ -1235,33 +1165,11 @@ div#stats_container a {
margin: 10px 5px 10px 7px;
}
div#prefs_container div#pref_error {
display: none;
width: 395px;
margin: 6px auto 6px auto;
padding: 3px 0 3px 0;
border: 2px solid #cc3333;
color: #cc3333;
font-size: 1.2em;
vertical-align: middle;
text-align: center;
height: 20px;
line-height: 20px;
background-color: #FFEFEF;
}
#transmission_version{
position: absolute;
bottom: 10px;
left: 10px;
color: #999;
}
/*--------------------------------------
*
* T R A N S M E N U
*
*--------------------------------------*/
/****
*****
***** POPUP MENU
*****
****/
.trans_menu {
margin: 0;
@@ -1297,9 +1205,8 @@ div#prefs_container div#pref_error {
.trans_menu > * li {
margin: 0;
padding: 0 10px 2px 20px !important;
padding: 3px 10px 3px 20px !important;
color: #000;
font-size: 14px;
cursor: default;
text-indent: auto !important;
width: inherit;
@@ -1322,10 +1229,6 @@ div#prefs_container div#pref_error {
.trans_menu li span.arrow {
float: right;
margin: 3px 0 0;
font-size: 11px;
color: #333;
text-shadow: none;
}
.trans_menu li.hover li.hover span.arrow, .trans_menu li.hover li.hover li.hover span.selected {
@@ -1334,7 +1237,6 @@ div#prefs_container div#pref_error {
.trans_menu span.selected {
margin: 0 3px 0 -15px;
font-size: 14px;
color: #666;
float: left;
}

View File

@@ -12,8 +12,7 @@ html {
body {
font: 11px Helvetica, Arial, sans-serif;
color: #323232 !important;
background: #fff;
background: #FFF;
text-align: center;
margin: 0;
padding: 0;
@@ -65,25 +64,24 @@ body.open_showing #torrent_filter_bar, body.open_showing #torrent_container {
margin: 0;
background: #6685a1 url('../images/graphics/iphone_chrome.png') top left repeat-x;
border: 1px outset #AEBBCB;
position: relative;
text-shadow: 0 -1px 0 #446;
}
#toolbar ul {
margin: 0;
padding: 0 3px;
text-align: left;
text-align: center;
}
#toolbar ul li {
list-style-type: none;
list-style-image: none;
padding: 0;
margin: 4px 0 0 0;
padding: 0 2px;
cursor: pointer;
display: inline-block;
}
#toolbar li#remove, li#open {
#toolbar li#remove, li#open, li#resume_selected, li#pause_selected {
float: left;
}
#toolbar li#resume_all, li#pause_all {
@@ -103,11 +101,7 @@ body.open_showing #torrent_filter_bar, body.open_showing #torrent_container {
font-weight: bold;
}
#toolbar ul li.disabled {
opacity: 0.25;
}
#toolbar ul li div div.toolbar_image {
#toolbar ul li div.toolbar_image {
width: 32px;
height: 32px;
margin: 0 auto 2px;
@@ -132,6 +126,12 @@ li#filter div:active div.toolbar_image { background-position: right -19
li#inspector div div.toolbar_image { background-position: left -224px; }
li#inspector div:active div.toolbar_image { background-position: right -224px; }
#toolbar ul li.disabled > div {
text-shadow: 0 1px 0 #fff;
opacity: 0.25;
cursor: default;
}
#toolbar ul li#filter,
#toolbar ul li#inspector,
#toolbar ul li.divider {
@@ -207,12 +207,13 @@ div#filter-popup #filter-by-state .row .filter-name {
left: 0px;
}
#filter-popup .row {
font-size: 1.2em;
text-align: left;
cursor: pointer;
margin: 15px 2px;
position: relative;
height: 18px;
-moz-user-select: none;
-webkit-user-select: none;
}
div#filter-popup .row .filter-img {
border: none;
@@ -256,7 +257,6 @@ div#filter-popup .row .filter-img {
***/
ul.torrent_list {
width: 100%;
margin: 0;
padding: 0;
text-align: left;
@@ -297,12 +297,12 @@ ul.torrent_list li.torrent.even {
}
ul.torrent_list li.torrent.selected {
background-color: #3875D7;
background-color: #3879D7;
color: #FFF;
}
ul.torrent_list li.torrent div.torrent_name {
font-size: 13px;
font-size: 1.3em;
font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
@@ -325,10 +325,29 @@ ul.torrent_list li.torrent.selected div.torrent_name {
color: #fff;
}
div.torrent_peer_details {
font-size: 10px;
ul.torrent_list div.torrent_progress_details,
ul.torrent_list div.torrent_peer_details {
clear: left;
font-size: 1em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
ul.torrent_list li.torrent div.torrent_progress_details.error {
color: #FF0000;
}
ul.torrent_list li.torrent.selected div.torrent_progress_details.error {
color: #FFF;
}
ul.torrent_list li.torrent div.torrent_peer_details.error {
color: #FF0000;
}
ul.torrent_list li.torrent.selected div.torrent_peer_details.error {
color: #FFF;
}
/**
* Progressbar
*
@@ -402,24 +421,24 @@ ul.torrent_list div.torrent_progress_bar.complete.leeching {
border-color: #3D9DEA;
}
ul.torrent_list div.torrent_progress_bar.complete.leeching.queued {
background-position: left -70px;
border-color: #889CA5;
background-position: left -70px;
border-color: #889CA5;
}
ul.torrent_list div.torrent_progress_bar.incomplete.leeching {
background-position: left -20px;
border-color: #CFCFCF;
}
ul.torrent_list div.torrent_progress_bar.incomplete.leeching.queued {
background-position: left -80px;
border-color: #C4C4C4;
background-position: left -80px;
border-color: #C4C4C4;
}
ul.torrent_list div.torrent_progress_bar.complete.seeding {
background-position: left -40px;
border-color: #269E30;
}
ul.torrent_list div.torrent_progress_bar.complete.seeding.queued {
background-position: left -60px;
border-color: #8A998D;
background-position: left -60px;
border-color: #8A998D;
}
ul.torrent_list div.torrent_progress_bar.incomplete.seeding {
background-position: left -10px;
@@ -474,17 +493,6 @@ div.dialog_container a {
text-align: center;
}
div.dialog_container a#dialog_cancel_button, div.dialog_container a#prefs_cancel_button {
left: 55px;
}
div.dialog_container a#dialog_confirm_button, div.dialog_container a#prefs_save_button {
right: 55px;
color: black;
text-shadow: none;
background: #fff;
}
#dialog_container div.dialog_window img {
margin: 5px auto 12px;
}
@@ -514,93 +522,47 @@ div.dialog_container a#dialog_confirm_button, div.dialog_container a#prefs_save_
text-align: left;
}
/*--------------------------------------
*
* P R E F S C O N T A I N E R
*
*--------------------------------------*/
/***
****
**** PREFERENCES
****
***/
div#prefs_container {
#prefs-dialog.ui-tabs .ui-tabs-panel {
padding: 0px;
-moz-user-select: none;
-webkit-user-select: none;
}
.prefs-section {
margin: 10px;
text-align: left;
}
div#prefs_container label.item {
margin: 0 5px 0 15px;
float: left;
.prefs-section > * {
padding-top: 8px;
padding-left: 8px;
}
form#prefs_form {
height: 365px;
padding: 0 5px;
}
div#prefs_container label.suffix {
margin: 0 5px 0 10px;
float: left;
}
div#prefs_container input {
float: left;
}
div#prefs_container div.preference input[type=checkbox] {
margin: 3px 7px 0 16px;
width: 18px;
height: 18px;
clear: left;
}
div#prefs_container label {
line-height: 25px;
display: block;
}
div#prefs_container div.download_location label.item,
div#prefs_container div.port label.item,
div#prefs_container div.web_gui label.item {
width: 127px;
clear: left;
}
div#prefs_container div.auto_start label.item,
div#prefs_container div.encryption label.item,
div#prefs_container div.limit_total label.item {
margin: 0 5px 0 0;
}
div#prefs_container div.limit_total label.item {
width: 101px;
}
div#prefs_container div.preference input[type=text] {
padding: 2px 2px 1px;
text-shadow: none !important;
font-size: 13px;
width: 50px;
}
div#prefs_container div.download_location input {
position: absolute;
right: 20px;
left: 160px;
width: auto !important;
}
div#prefs_container label.category {
clear: both;
.prefs-section .title {
font-weight: bold;
padding-left: 0px;
}
div#prefs_container a {
margin-top: 42px !important;
.prefs-section .row .key {
float: left;
padding-top: 3px;
}
.landscape div.dialog_container a#prefs_cancel_button {
left: 135px;
.prefs-section .row .key > * {
margin-left: 0px;
}
.landscape div.dialog_container a#prefs_save_button {
right: 135px;
.prefs-section .row .value {
margin-left: 150px;
}
.prefs-section .row .value > * {
width: 100%;
}
.prefs-section .checkbox-row > input {
margin: 0px;
}
.prefs-section .checkbox-row > label {
margin-left: 5px;
}
/*--------------------------------------
@@ -630,11 +592,10 @@ div#torrent_inspector {
div#torrent_inspector #torrent_inspector_name {
margin: 0;
overflow: hidden;
word-wrap: break-word;
}
div#torrent_inspector #torrent_inspector_size {
font-size: 1.2em;
margin: 3;
margin: 3px;
display: block;
padding-top: 2px;
}
@@ -790,9 +751,6 @@ div.inspector_torrent_file_list_entry_name {
li.inspector_torrent_file_list_entry.skip>.inspector_torrent_file_list_entry_name {
color: #666;
}
li.inspector_torrent_file_list_entry.even {
background-color: #EEEEEE;
}
div.inspector_torrent_file_list_entry_progress {
font-size: 1em;
color: #666;
@@ -836,12 +794,21 @@ div.file_priority_control {
cursor: pointer;
}
div.file_priority_control.normal {
background-position: left top;
}
div.file_priority_control.normal:hover {
background-position: right top;
}
div.file_priority_control.high {
background-position: left -19px;
}
div.file_priority_control.high:hover {
background-position: right -19px;
}
div.file_priority_control.low {
background-position: left -38px;
}
div.file_priority_control.low:hover {
background-position: right -38px;
}
ul.single_file li.inspector_torrent_file_list_entry>.file_priority_control, li.inspector_torrent_file_list_entry.complete div.file_priority_control {
@@ -850,52 +817,92 @@ ul.single_file li.inspector_torrent_file_list_entry>.file_priority_control, li.i
}
/****
*****
***** MAIN WINDOW FOOTER
*****
****/
div.torrent_footer {
height: 20px;
padding: 1px;
border-top: 1px solid #555;
position: relative;
width: 100%;
z-index: 3;
background-color: #6b83a1;
}
div.torrent_footer > * {
position: relative;
float: left;
margin-right: 30px;
}
div.torrent_footer > * {
height: 18px;
width: 32px;
cursor: pointer;
-moz-user-select: none;
-webkit-user-select: none;
}
div.torrent_footer ul#settings_menu {
display: none;
}
#turtle-button {
background: transparent url('../images/graphics/chrome.png') left -18px no-repeat;
}
#turtle-button:active {
background-position: -32px -18px;
}
#turtle-button.enabled {
background-position: left -36px;
}
#turtle-button.enabled:active {
background-position: -32px -36px;
}
#compact-button {
background: transparent url('../images/graphics/chrome.png') left -54px no-repeat;
}
#compact-button:active {
background-position: -32px -54px;
}
#compact-button.enabled {
background-position: left -72px;
}
#compact-button.enabled:active {
background-position: -32px -72px;
}
#prefs-button {
background: transparent url('../images/graphics/chrome.png') left -90px no-repeat;
}
#prefs-button:active {
background-position: -32px -90px;
}
/****
*****
***** POPUP MENU
*****
****/
.trans_menu,
.trans_menu * {
display: none;
}
/*--------------------------------------
*
* T O R R E N T F O O T E R
* Hide remnants of stuff we don't need, like
* transmenu and contextmenu.
*
*--------------------------------------*/
div.torrent_footer {
margin: 0px;
height: 20px;
border-top: 1px solid #777;
position: relative;
width: 100%;
z-index: 2;
text-align: center;
color: #222;
text-shadow: 0 1px 1px #fff;
overflow: hidden;
background-color: #B9B9B9; /* fallback color if gradients are not supported */
background-image: -webkit-gradient(linear, left top, left bottom, from(#C9C9C9), to(#A7A7A7));
background-image: -webkit-linear-gradient(top, #C9C9C9, #A7A7A7);
background-image: -moz-linear-gradient(top, #C9C9C9, #A7A7A7);
background-image: -ms-linear-gradient(top, #C9C9C9, #A7A7A7);
background-image: -o-linear-gradient(top, #C9C9C9, #A7A7A7);
background-image: linear-gradient(top, #C9C9C9, #A7A7A7); /* standard, but currently unimplemented */
}
div.torrent_footer div#disk_space_container, div.torrent_footer a#preferences_link {
float: right;
font-size: 12px;
vertical-align: middle;
margin: 1px 6px 0 0;
padding: 2px 0 2px;
max-width: 55%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
div.torrent_footer a#preferences_link {
float: left;
font-weight: bold;
margin: 1px 0 0 6px;
}
body.prefs_showing div.torrent_footer a#preferences_link, body.dialog_showing div.torrent_footer a#preferences_link {
div#torrent_context_menu {
display: none;
}
@@ -910,51 +917,3 @@ iframe#torrent_upload_frame {
padding: 0;
margin: 0;
}
div.torrent_footer #compact-button,
div.torrent_footer #turtle-button {
position: absolute;
height: 18px;
width: 32px !important;
top: 0px;
margin: 2px;
}
#compact-button {
right: 0px;
background: transparent url('../images/graphics/chrome.png') left -54px no-repeat;
}
#compact-button:active {
background-position: -32px -54px;
}
#compact-button.enabled {
background-position: left -72px;
}
#compact-button.enabled:active {
background-position: -32px -72px;
}
#turtle-button {
left: 0px;
background: transparent url('../images/graphics/chrome.png') left -18px no-repeat;
}
#turtle-button:active {
background-position: -32px -18px;
}
#turtle-button.enabled {
background-position: left -36px;
}
#turtle-button.enabled:active {
background-position: -32px -36px;
}
/*--------------------------------------
*
* Hide remnants of stuff we don't need, like
* transmenu and contextmenu.
*
*--------------------------------------*/
.torrent_footer div.main_container, .torrent_footer ul#settings_menu, div.torrent_footer ul#settings_menu li#button, div#torrent_context_menu {
display: none;
}