Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: chrome/browser/resources/md_downloads/item_view.js

Issue 1224623013: Port downloads.ItemView to a Polymer component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@p-dl-rough-draft2
Patch Set: actually remove i18n changes Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 cr.define('downloads', function() {
6 var ItemView = Polymer({
7 is: 'item-view',
8
9 properties: {
10 dateContainer: {
11 type: Object,
12 value: function() {
13 return this.$['date-container'];
michaelpg 2015/07/08 19:39:52 I'm not sure this is safe -- is the local DOM guar
Dan Beam 2015/07/09 18:13:45 Done. (in an alternate way)
14 },
15 },
16 },
17
18 ready: function() {
19 this.$.safe.ondragstart = this.onSafeDragstart_.bind(this);
20 this.$['file-link'].onclick = this.onFileLinkClick_.bind(this);
21 this.$.show.onclick = this.onShowClick_.bind(this);
22 this.$.pause.onclick = this.onPauseClick_.bind(this);
23 this.$.resume.onclick = this.onResumeClick_.bind(this);
24 this.$['safe-remove'].onclick = this.onSafeRemoveClick_.bind(this);
25 this.$.cancel.onclick = this.onCancelClick_.bind(this);
26 this.$.restore.onclick = this.onRestoreClick_.bind(this);
27 this.$.save.onclick = this.onSaveClick_.bind(this);
28 this.$['dangerous-remove'].onclick = this.onDangerRemoveClick_.bind(this);
29 this.$.discard.onclick = this.onDiscardClick_.bind(this);
30 },
31
32 /** @param {!downloads.Data} data */
33 update: function(data) {
34 assert(!this.id_ || data.id == this.id_);
35 this.id_ = data.id; // This is the only thing saved from |data|.
36
37 this.classList.toggle('otr', data.otr);
38
39 this.ensureTextIs_(this.$.since, data.since_string);
40 this.ensureTextIs_(this.$.date, data.date_string);
41
42 var dangerText = this.getDangerText_(data);
43 this.$.dangerous.hidden = !dangerText;
44 this.$.safe.hidden = !!dangerText;
45
46 if (dangerText) {
47 this.ensureTextIs_(this.$.description, dangerText);
48
49 var dangerType = data.danger_type;
50 var dangerousFile = dangerType == downloads.DangerType.DANGEROUS_FILE;
51 this.$.description.classList.toggle('malware', !dangerousFile);
52
53 var idr = dangerousFile ? 'IDR_WARNING' : 'IDR_SAFEBROWSING_WARNING';
54 downloads.IconLoader.loadScaledIcon(this.$['dangerous-icon'],
55 'chrome://theme/' + idr);
56
57 /** @const */ var showMalwareControls =
58 dangerType == downloads.DangerType.DANGEROUS_CONTENT ||
59 dangerType == downloads.DangerType.DANGEROUS_HOST ||
60 dangerType == downloads.DangerType.DANGEROUS_URL ||
61 dangerType == downloads.DangerType.POTENTIALLY_UNWANTED;
62
63 this.$['malware-controls'].hidden = !showMalwareControls;
64 this.$.discard.hidden = showMalwareControls;
65 this.$.save.hidden = showMalwareControls;
66 } else {
67 var icon = 'chrome://fileicon/' + encodeURIComponent(data.file_path);
68 downloads.IconLoader.loadScaledIcon(this.$['safe-icon'], icon);
69
70 /** @const */ var isInProgress =
71 data.state == downloads.States.IN_PROGRESS;
72 this.classList.toggle('in-progress', isInProgress);
73
74 /** @const */ var completelyOnDisk =
75 data.state == downloads.States.COMPLETE &&
76 !data.file_externally_removed;
77
78 this.$['file-link'].href = data.url;
79 this.ensureTextIs_(this.$['file-link'], data.file_name);
80 this.$['file-link'].hidden = !completelyOnDisk;
81
82 /** @const */ var isInterrupted =
83 data.state == downloads.States.INTERRUPTED;
84 this.$.name.classList.toggle('interrupted', isInterrupted);
85 this.ensureTextIs_(this.$.name, data.file_name);
86 this.$.name.hidden = completelyOnDisk;
87
88 this.$.show.hidden = !completelyOnDisk;
89
90 this.$.retry.href = data.url;
91 this.$.retry.hidden = !data.retry;
92
93 this.$.pause.hidden = !isInProgress;
94
95 this.$.resume.hidden = !data.resume;
96
97 /** @const */ var isPaused = data.state == downloads.States.PAUSED;
98 /** @const */ var showCancel = isPaused || isInProgress;
99 this.$.cancel.hidden = !showCancel;
100
101 this.$['safe-remove'].hidden = showCancel ||
102 !loadTimeData.getBoolean('allow_deleting_history');
103
104 /** @const */ var controlledByExtension = data.by_ext_id &&
105 data.by_ext_name;
106 this.$['controlled-by'].hidden = !controlledByExtension;
107 if (controlledByExtension) {
108 var link = this.$['controlled-by'].querySelector('a');
109 link.href = 'chrome://extensions#' + data.by_ext_id;
110 link.setAttribute('column-type', 'controlled-by');
111 link.textContent = data.by_ext_name;
112 }
113
114 this.ensureTextIs_(this.$['src-url'], data.url);
115 this.$['src-url'].href = data.url;
116 this.ensureTextIs_(this.$.status, this.getStatusText_(data));
117
118 this.$.progress.hidden = !isInProgress;
119
120 // TODO(dbeam): implement progress.
121 }
122 },
123
124 /**
125 * Overwrite |el|'s textContent if it differs from |text|.
126 * @param {!Element} el
127 * @param {string} text
128 * @private
129 */
130 ensureTextIs_: function(el, text) {
131 if (el.textContent != text)
132 el.textContent = text;
133 },
134
135 /**
136 * @param {!downloads.Data} data
137 * @return {string} Text describing the danger of a download. Empty if not
138 * dangerous.
139 */
140 getDangerText_: function(data) {
141 switch (data.danger_type) {
142 case downloads.DangerType.DANGEROUS_FILE:
143 return loadTimeData.getStringF('danger_file_desc', data.file_name);
144 case downloads.DangerType.DANGEROUS_URL:
145 return loadTimeData.getString('danger_url_desc');
146 case downloads.DangerType.DANGEROUS_CONTENT: // Fall through.
147 case downloads.DangerType.DANGEROUS_HOST:
148 return loadTimeData.getStringF('danger_content_desc', data.file_name);
149 case downloads.DangerType.UNCOMMON_CONTENT:
150 return loadTimeData.getStringF('danger_uncommon_desc',
151 data.file_name);
152 case downloads.DangerType.POTENTIALLY_UNWANTED:
153 return loadTimeData.getStringF('danger_settings_desc',
154 data.file_name);
155 default:
156 return '';
157 }
158 },
159
160 /**
161 * @param {!downloads.Data} data
162 * @return {string} User-visible status update text.
163 * @private
164 */
165 getStatusText_: function(data) {
166 switch (data.state) {
167 case downloads.States.IN_PROGRESS:
168 case downloads.States.PAUSED: // Fallthrough.
169 assert(typeof data.progress_status_text == 'string');
170 return data.progress_status_text;
171 case downloads.States.CANCELLED:
172 return loadTimeData.getString('status_cancelled');
173 case downloads.States.DANGEROUS:
174 break; // Intentionally hit assertNotReached(); at bottom.
175 case downloads.States.INTERRUPTED:
176 assert(typeof data.last_reason_text == 'string');
177 return data.last_reason_text;
178 case downloads.States.COMPLETE:
179 return data.file_externally_removed ?
180 loadTimeData.getString('status_removed') : '';
181 }
182 assertNotReached();
183 return '';
184 },
185
186 /**
187 * @private
188 * @param {Event} e
189 */
190 onSafeDragstart_: function(e) {
191 e.preventDefault();
192 chrome.send('drag', [this.id_]);
193 },
194
195 /**
196 * @param {Event} e
197 * @private
198 */
199 onFileLinkClick_: function(e) {
200 e.preventDefault();
201 chrome.send('openFile', [this.id_]);
202 },
203
204 /** @private */
205 onShowClick_: function() {
206 chrome.send('show', [this.id_]);
207 },
208
209 /** @private */
210 onPauseClick_: function() {
211 chrome.send('pause', [this.id_]);
212 },
213
214 /** @private */
215 onResumeClick_: function() {
216 chrome.send('resume', [this.id_]);
217 },
218
219 /** @private */
220 onSafeRemoveClick_: function() {
221 chrome.send('remove', [this.id_]);
222 },
223
224 /** @private */
225 onCancelClick_: function() {
226 chrome.send('cancel', [this.id_]);
227 },
228
229 /** @private */
230 onRestoreClick_: function() {
231 this.onSaveClick_();
232 },
233
234 /** @private */
235 onSaveClick_: function() {
236 chrome.send('saveDangerous', [this.id_]);
237 },
238
239 /** @private */
240 onDangerRemoveClick_: function() {
241 this.onDiscardClick_();
242 },
243
244 /** @private */
245 onDiscardClick_: function() {
246 chrome.send('discardDangerous', [this.id_]);
247 },
248 });
249
250 return {ItemView: ItemView};
251 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698