2 * Copyright © Mnemosyne LLC
4 * This file is licensed under the GPLv2.
5 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
8 function FileRow(torrent, i)
22 priority_low_button: null,
23 priority_normal_button: null,
24 priority_high_button: null,
29 initialize = function(torrent, i) {
30 fields.torrent = torrent;
32 createRow(torrent, i);
35 readAttributes = function(file) {
36 if (fields.have !== file.bytesCompleted) {
37 fields.have = file.bytesCompleted;
38 fields.isDirty = true;
40 if (fields.size !== file.length) {
41 fields.size = file.length;
42 fields.isDirty = true;
44 if (fields.priority !== file.priority) {
45 fields.priority = file.priority;
46 fields.isDirty = true;
48 if (fields.isWanted !== file.wanted) {
49 fields.isWanted = file.wanted;
50 fields.isDirty = true;
54 refreshWantedHTML = function()
56 var e = $(elements.root);
57 e.toggleClass('skip', !fields.isWanted);
58 e.toggleClass('complete', isDone());
59 $(e[0].checkbox).prop('checked', fields.isWanted);
61 refreshPriorityHTML = function()
63 $(elements.priority_high_button ).toggleClass('selected', fields.priority === 1 );
64 $(elements.priority_normal_button).toggleClass('selected', fields.priority === 0 );
65 $(elements.priority_low_button ).toggleClass('selected', fields.priority === -1 );
67 refreshProgressHTML = function()
69 var pct = 100 * (fields.size ? (fields.have / fields.size) : 1.0),
70 c = [ Transmission.fmt.size(fields.have),
72 Transmission.fmt.size(fields.size),
74 Transmission.fmt.percentString(pct),
76 setInnerHTML(elements.progress, c);
78 refreshHTML = function() {
80 fields.isDirty = false;
81 refreshProgressHTML();
83 refreshPriorityHTML();
86 refresh = function() {
87 readAttributes(fields.torrent.getFile(fields.index));
91 isDone = function () {
92 return fields.have >= fields.size;
95 createRow = function(torrent, i) {
96 var file = torrent.getFile(i), e, name, root, box;
98 root = document.createElement('li');
99 root.id = 't' + fields.torrent.getId() + 'f' + fields.index;
100 root.className = 'inspector_torrent_file_list_entry ' + ((i%2)?'odd':'even');
101 elements.root = root;
103 e = document.createElement('input');
105 e.className = "file_wanted_control";
106 e.title = 'Download file';
107 $(e).change(function(ev){ fireWantedChanged( $(ev.currentTarget).prop('checked')); });
111 e = document.createElement('div');
112 e.className = 'file-priority-radiobox';
115 e = document.createElement('div');
117 e.title = 'Low Priority';
118 $(e).click(function(){ firePriorityChanged(-1); });
119 elements.priority_low_button = e;
122 e = document.createElement('div');
123 e.className = 'normal';
124 e.title = 'Normal Priority';
125 $(e).click(function(){ firePriorityChanged(0); });
126 elements.priority_normal_button = e;
129 e = document.createElement('div');
130 e.title = 'High Priority';
131 e.className = 'high';
132 $(e).click(function(){ firePriorityChanged(1); });
133 elements.priority_high_button = e;
136 root.appendChild(box);
138 name = file.name || 'Unknown';
139 name = name.substring(name.lastIndexOf('/')+1);
140 name = name.replace(/([\/_\.])/g, "$1​");
141 e = document.createElement('div');
142 e.className = "inspector_torrent_file_list_entry_name";
146 e = document.createElement('div');
147 e.className = "inspector_torrent_file_list_entry_progress";
149 elements.progress = e;
155 fireWantedChanged = function(do_want) {
156 $(fields.me).trigger('wantedToggled',[ fields.me, do_want ]);
158 firePriorityChanged = function(priority) {
159 $(fields.me).trigger('priorityToggled',[ fields.me, priority ]);
166 this.getElement = function() {
167 return elements.root;
169 this.getIndex = function() {
172 this.isEditable = function () {
173 return (fields.torrent.getFileCount()>1) && !isDone();
176 initialize(torrent, i);