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

Side by Side Diff: chrome/browser/resources/file_manager/js/photo/importing_dialog.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 'use strict';
6
7 /**
8 * ImportingDialog manages the import process (which is really a copying).
9 * @param {HTMLElement} parentNode Node to be parent for this dialog.
10 * @param {FileOperationManager} fileOperationManager File operation manager
11 * instance.
12 * @param {MetadataCache} metadataCache Metadata cache.
13 * @param {number=} opt_parentWindowId Id of the parent window.
14 * @constructor
15 */
16 function ImportingDialog(
17 parentNode, fileOperationManager, metadataCache, opt_parentWindowId) {
18 cr.ui.dialogs.BaseDialog.call(this, parentNode);
19 this.parentWindowId_ = opt_parentWindowId;
20 this.fileOperationManager_ = fileOperationManager;
21 this.metadataCache_ = metadataCache;
22 this.onCopyProgressBound_ = this.onCopyProgress_.bind(this);
23 }
24
25 ImportingDialog.prototype = {
26 __proto__: cr.ui.dialogs.BaseDialog.prototype
27 };
28
29 /**
30 * One-time initialization of DOM.
31 * @private
32 */
33 ImportingDialog.prototype.initDom_ = function() {
34 cr.ui.dialogs.BaseDialog.prototype.initDom_.call(this);
35
36 this.container_.classList.add('importing-dialog');
37
38 this.content_ = util.createChild(this.frame_, 'content');
39 this.frame_.insertBefore(this.content_, this.frame_.firstChild);
40 this.content_.appendChild(this.text_);
41
42 this.imageBox_ = util.createChild(this.frame_, 'img-container');
43 this.imageBox_.setAttribute('state', 'progress');
44 this.frame_.insertBefore(this.imageBox_, this.frame_.firstChild);
45
46 var progressContainer = util.createChild(this.content_, 'progress-container');
47 this.progress_ = util.createChild(progressContainer, 'progress-bar');
48 util.createChild(this.progress_, 'progress-track smoothed');
49
50 this.buttons_ = this.frame_.querySelector('.cr-dialog-buttons');
51 this.content_.appendChild(this.buttons_);
52
53 this.viewButton_ = util.createChild(
54 this.buttons_, 'cr-dialog-view', 'button');
55 this.viewButton_.addEventListener('click',
56 this.onViewClick_.bind(this));
57 this.buttons_.insertBefore(this.viewButton_, this.buttons_.firstChild);
58
59 this.viewButton_.textContent =
60 loadTimeData.getString('VIEW_LABEL');
61 this.viewButton_.hidden = true;
62 this.cancelButton_.textContent =
63 loadTimeData.getString('PHOTO_IMPORT_CANCEL_BUTTON');
64 this.okButton_.textContent =
65 loadTimeData.getString('OK_LABEL');
66 this.okButton_.hidden = true;
67 };
68
69 /**
70 * Shows dialog.
71 * @param {Array.<FileEntry>} entries Entries to import.
72 * @param {boolean} move Whether to move files instead of copying them.
73 */
74 ImportingDialog.prototype.show = function(entries, move) {
75 var message = loadTimeData.getString('PHOTO_IMPORT_IMPORTING');
76 cr.ui.dialogs.BaseDialog.prototype.show.call(this, message, null, null, null);
77
78 this.error_ = false;
79 this.entries_ = entries;
80 this.move_ = move;
81
82 this.progress_.querySelector('.progress-track').style.width = '0';
83 this.fileOperationManager_.addEventListener('copy-progress',
84 this.onCopyProgressBound_);
85
86 this.previewEntry_(0);
87 };
88
89 /**
90 * Starts copying.
91 * @param {DirectoryEntry} destination Directory to import to.
92 */
93 ImportingDialog.prototype.start = function(destination) {
94 this.destination_ = destination;
95 this.fileOperationManager_.paste(
96 this.entries_.map(function(e) { return e.fullPath }),
97 this.destination_.fullPath,
98 this.move_);
99 };
100
101 /**
102 * Shows entry preview.
103 * @param {number} index Entry index.
104 * @private
105 */
106 ImportingDialog.prototype.previewEntry_ = function(index) {
107 var box = this.imageBox_;
108 var entry = this.entries_[index];
109 this.metadataCache_.get(entry, 'thumbnail|filesystem',
110 function(metadata) {
111 new ThumbnailLoader(entry.toURL(),
112 ThumbnailLoader.LoaderType.IMAGE,
113 metadata).
114 load(box, ThumbnailLoader.FillMode.FILL);
115 });
116 };
117
118 /**
119 * Closes dialog.
120 * @param {function()=} opt_onHide Completion callback.
121 */
122 ImportingDialog.prototype.hide = function(opt_onHide) {
123 this.fileOperationManager_.removeEventListener('copy-progress',
124 this.onCopyProgressBound_);
125 cr.ui.dialogs.BaseDialog.prototype.hide.call(this, opt_onHide);
126 };
127
128 /**
129 * Cancel button click event handler.
130 * @private
131 */
132 ImportingDialog.prototype.onCancelClick_ = function() {
133 this.fileOperationManager_.requestCancel();
134 this.hide();
135 };
136
137 /**
138 * OK button click event handler.
139 * @private
140 */
141 ImportingDialog.prototype.onOkClick_ = function() {
142 this.hide();
143 if (!this.error_)
144 window.close();
145 };
146
147 /**
148 * View button click event handler. Invokes the mosaic view.
149 * @private
150 */
151 ImportingDialog.prototype.onViewClick_ = function() {
152 var url = chrome.runtime.getURL('main.html') +
153 '?{%22gallery%22:%22mosaic%22}#' + this.destination_.fullPath;
154 if (!this.parentWindowId_ ||
155 !util.redirectMainWindow(this.parentWindowId_, url)) {
156 // The parent window hasn't been found. Launch the url as a new window.
157 // TODO(mtomasz): Change it to chrome.fileBrowserPrivate.openNewWindow.
158 chrome.app.window.create(url);
159 }
160 this.hide();
161 window.close();
162 };
163
164 /**
165 * Event handler for keydown event.
166 * @param {Event} event The event.
167 * @private
168 */
169 ImportingDialog.prototype.onContainerKeyDown_ = function(event) {
170 // Handle Escape.
171 if (event.keyCode == 27) {
172 this.onCancelClick_(event);
173 event.preventDefault();
174 }
175 };
176
177 /**
178 * 'copy-progress' event handler. Show progress.
179 * @param {Event} event A 'copy-progress' event from FileOperationManager.
180 * @private
181 */
182 ImportingDialog.prototype.onCopyProgress_ = function(event) {
183 switch (event.reason) {
184 case 'BEGIN':
185 case 'PROGRESS':
186 var progress = this.fileOperationManager_.getStatus().percentage;
187 this.progress_.querySelector('.progress-track').style.width =
188 (progress * 100) + '%';
189 var index = Math.round(this.entries_.length * progress);
190 if (index == this.entries_.length) index--;
191 this.previewEntry_(index);
192 break;
193
194 case 'SUCCESS':
195 this.text_.textContent =
196 loadTimeData.getString('PHOTO_IMPORT_IMPORT_COMPLETE');
197 this.imageBox_.setAttribute('state', 'success');
198 this.cancelButton_.hidden = true;
199 this.viewButton_.hidden = false;
200 this.okButton_.hidden = false;
201 break;
202
203 case 'CANCELLED':
204 this.hide();
205 break;
206
207 case 'ERROR':
208 this.error_ = true;
209 this.text_.textContent =
210 loadTimeData.getString('PHOTO_IMPORT_IMPORTING_ERROR');
211 this.imageBox_.setAttribute('state', 'error');
212 this.cancelButton_.hidden = true;
213 this.viewButton_.hidden = true;
214 this.okButton_.hidden = false;
215 break;
216
217 default:
218 console.error('Unknown "copy-progress" event reason: ' + event.reason);
219 }
220 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698