• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/transmission/transmission-2.73/web/javascript/
1/**
2 * Copyright �� Mnemosyne LLC
3 *
4 * This file is licensed under the GPLv2.
5 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6 */
7
8function FileRow(torrent, depth, name, indices, even)
9{
10	var fields = {
11		have: 0,
12		indices: [],
13		isWanted: true,
14		priorityLow: false,
15		priorityNormal: false,
16		priorityHigh: false,
17		me: this,
18		size: 0,
19		torrent: null
20	},
21
22	elements = {
23		priority_low_button: null,
24		priority_normal_button: null,
25		priority_high_button: null,
26		progress: null,
27		root: null
28	},
29
30	initialize = function(torrent, depth, name, indices, even) {
31		fields.torrent = torrent;
32		fields.indices = indices;
33		createRow(torrent, depth, name, even);
34	},
35
36	refreshWantedHTML = function()
37	{
38		var e = $(elements.root);
39		e.toggleClass('skip', !fields.isWanted);
40		e.toggleClass('complete', isDone());
41		$(e[0].checkbox).prop('disabled', !isEditable());
42		$(e[0].checkbox).prop('checked', fields.isWanted);
43	},
44	refreshProgressHTML = function()
45	{
46		var pct = 100 * (fields.size ? (fields.have / fields.size) : 1.0),
47		    c = [ Transmission.fmt.size(fields.have),
48			  ' of ',
49			  Transmission.fmt.size(fields.size),
50			  ' (',
51			  Transmission.fmt.percentString(pct),
52			  '%)' ].join('');
53		setTextContent(elements.progress, c);
54	},
55	refreshImpl = function() {
56		var i,
57		    file,
58		    have = 0,
59		    size = 0,
60		    wanted = false,
61		    low = false,
62		    normal = false,
63		    high = false;
64
65		// loop through the file_indices that affect this row
66		for (i=0; i<fields.indices.length; ++i) {
67			file = fields.torrent.getFile (fields.indices[i]);
68			have += file.bytesCompleted;
69			size += file.length;
70			wanted |= file.wanted;
71			switch (file.priority) {
72				case -1: low = true; break;
73				case  0: normal = true; break;
74				case  1: high = true; break;
75			}
76		}
77
78		if ((fields.have != have) || (fields.size != size)) {
79			fields.have = have;
80			fields.size = size;
81			refreshProgressHTML();
82		}
83
84		if (fields.isWanted !== wanted) {
85			fields.isWanted = wanted;
86			refreshWantedHTML();
87		}
88
89		if (fields.priorityLow !== low) {
90			fields.priorityLow = low;
91			$(elements.priority_low_button).toggleClass('selected', low);
92		}
93
94		if (fields.priorityNormal !== normal) {
95			fields.priorityNormal = normal;
96			$(elements.priority_normal_button).toggleClass('selected', normal);
97		}
98
99		if (fields.priorityHigh !== high) {
100			fields.priorityHigh = high;
101			$(elements.priority_high_button).toggleClass('selected', high);
102		}
103	},
104
105	isDone = function () {
106		return fields.have >= fields.size;
107	},
108	isEditable = function () {
109		return (fields.torrent.getFileCount()>1) && !isDone();
110	};
111
112	createRow = function(torrent, depth, name, even) {
113		var e, root, box;
114
115		root = document.createElement('li');
116		root.className = 'inspector_torrent_file_list_entry' + (even?'even':'odd');
117		elements.root = root;
118
119		e = document.createElement('input');
120		e.type = 'checkbox';
121		e.className = "file_wanted_control";
122		e.title = 'Download file';
123		$(e).change(function(ev){ fireWantedChanged( $(ev.currentTarget).prop('checked')); });
124		root.checkbox = e;
125		root.appendChild(e);
126
127		e = document.createElement('div');
128		e.className = 'file-priority-radiobox';
129		box = e;
130
131			e = document.createElement('div');
132			e.className = 'low';
133			e.title = 'Low Priority';
134			$(e).click(function(){ firePriorityChanged(-1); });
135			elements.priority_low_button = e;
136			box.appendChild(e);
137
138			e = document.createElement('div');
139			e.className = 'normal';
140			e.title = 'Normal Priority';
141			$(e).click(function(){ firePriorityChanged(0); });
142			elements.priority_normal_button = e;
143			box.appendChild(e);
144
145			e = document.createElement('div');
146			e.title = 'High Priority';
147			e.className = 'high';
148			$(e).click(function(){ firePriorityChanged(1); });
149			elements.priority_high_button = e;
150			box.appendChild(e);
151
152		root.appendChild(box);
153
154		e = document.createElement('div');
155		e.className = "inspector_torrent_file_list_entry_name";
156		setTextContent(e, name);
157		$(e).click(function(){ fireNameClicked(-1); });
158		root.appendChild(e);
159
160		e = document.createElement('div');
161		e.className = "inspector_torrent_file_list_entry_progress";
162		root.appendChild(e);
163		$(e).click(function(){ fireNameClicked(-1); });
164		elements.progress = e;
165
166		$(root).css('margin-left', '' + (depth*16) + 'px');
167
168		refreshImpl();
169		return root;
170	},
171
172	fireWantedChanged = function(do_want) {
173		$(fields.me).trigger('wantedToggled',[ fields.indices, do_want ]);
174	},
175	firePriorityChanged = function(priority) {
176		$(fields.me).trigger('priorityToggled',[ fields.indices, priority ]);
177	},
178	fireNameClicked = function() {
179		$(fields.me).trigger('nameClicked',[ fields.me, fields.indices ]);
180	};
181
182	/***
183	****  PUBLIC
184	***/
185
186	this.getElement = function() {
187		return elements.root;
188	};
189	this.refresh = function() {
190		refreshImpl();
191	};
192
193	initialize(torrent, depth, name, indices, even);
194};
195