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

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

Issue 10342010: Add gdata content search to file_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style nits Created 8 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * FileManager constructor. 6 * FileManager constructor.
7 * 7 *
8 * FileManager objects encapsulate the functionality of the file selector 8 * FileManager objects encapsulate the functionality of the file selector
9 * dialogs, as well as the full screen file manager application (though the 9 * dialogs, as well as the full screen file manager application (though the
10 * latter is not yet implemented). 10 * latter is not yet implemented).
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 this.commands_[key].disabled = !this.canExecute_(key); 971 this.commands_[key].disabled = !this.canExecute_(key);
972 }; 972 };
973 973
974 /** 974 /**
975 * @param {string} commandId Command identifier. 975 * @param {string} commandId Command identifier.
976 * @return {boolean} True if the command can be executed for current 976 * @return {boolean} True if the command can be executed for current
977 * selection. 977 * selection.
978 */ 978 */
979 FileManager.prototype.canExecute_ = function(commandId) { 979 FileManager.prototype.canExecute_ = function(commandId) {
980 var readonly = this.isOnReadonlyDirectory(); 980 var readonly = this.isOnReadonlyDirectory();
981 var shouldCreate = !util.isSpecialReadonlyDirectory(
982 this.directoryModel_.getCurrentDirEntry().fullPath);
981 switch (commandId) { 983 switch (commandId) {
982 case 'copy': 984 case 'copy':
983 case 'cut': 985 case 'cut':
984 return this.document_.queryCommandEnabled(commandId); 986 return this.document_.queryCommandEnabled(commandId);
985 987
986 case 'paste': 988 case 'paste':
987 return !!this.fileTransferController_ && 989 return !!this.fileTransferController_ &&
988 this.fileTransferController_.queryPasteCommandEnabled(); 990 this.fileTransferController_.queryPasteCommandEnabled() &&
991 shouldCreate;
989 992
990 case 'rename': 993 case 'rename':
991 return (// Initialized to the point where we have a current directory 994 return (// Initialized to the point where we have a current directory
992 !readonly && 995 !readonly &&
993 // Rename not in progress. 996 // Rename not in progress.
994 !this.isRenamingInProgress() && 997 !this.isRenamingInProgress() &&
995 // Only one file selected. 998 // Only one file selected.
996 this.selection && 999 this.selection &&
997 this.selection.totalCount == 1); 1000 this.selection.totalCount == 1);
998 1001
999 case 'delete': 1002 case 'delete':
1000 return (// Initialized to the point where we have a current directory 1003 return (// Initialized to the point where we have a current directory
1001 !readonly && 1004 !readonly &&
1002 // Rename not in progress. 1005 // Rename not in progress.
1003 !this.isRenamingInProgress() && 1006 !this.isRenamingInProgress() &&
1004 this.selection && 1007 this.selection &&
1005 this.selection.totalCount > 0); 1008 this.selection.totalCount > 0);
1006 1009
1007 case 'newfolder': 1010 case 'newfolder':
1008 return !readonly && 1011 return !readonly &&
1012 shouldCreate &&
1009 (this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE || 1013 (this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE ||
1010 this.dialogType_ == FileManager.DialogType.FULL_PAGE); 1014 this.dialogType_ == FileManager.DialogType.FULL_PAGE);
1011 1015
1012 case 'unmount': 1016 case 'unmount':
1013 return true; 1017 return true;
1014 1018
1015 case 'format': 1019 case 'format':
1016 var entry = this.directoryModel_.getCurrentRootDirEntry(); 1020 var entry = this.directoryModel_.getCurrentRootDirEntry();
1017 1021
1018 return entry && DirectoryModel.getRootType(entry.fullPath) == 1022 return entry && DirectoryModel.getRootType(entry.fullPath) ==
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 * Render filename label for grid and list view. 1827 * Render filename label for grid and list view.
1824 * @param {Entry} entry The Entry object to render. 1828 * @param {Entry} entry The Entry object to render.
1825 * @return {HTMLDivElement} The label. 1829 * @return {HTMLDivElement} The label.
1826 */ 1830 */
1827 FileManager.prototype.renderFileNameLabel_ = function(entry) { 1831 FileManager.prototype.renderFileNameLabel_ = function(entry) {
1828 // Filename need to be in a '.filename-label' container for correct 1832 // Filename need to be in a '.filename-label' container for correct
1829 // work of inplace renaming. 1833 // work of inplace renaming.
1830 var fileName = this.document_.createElement('div'); 1834 var fileName = this.document_.createElement('div');
1831 fileName.className = 'filename-label'; 1835 fileName.className = 'filename-label';
1832 1836
1837 var displayName =
1838 this.directoryModel_.getDisplayName(entry.fullPath, entry.name);
1839
1833 fileName.textContent = 1840 fileName.textContent =
1834 this.directoryModel_.getCurrentDirEntry().name == '' ? 1841 this.directoryModel_.getCurrentDirEntry().name == '' ?
1835 this.getRootLabel_(entry.name) : entry.name; 1842 this.getRootLabel_(displayName) : displayName;
1836 return fileName; 1843 return fileName;
1837 }; 1844 };
1838 1845
1839 /** 1846 /**
1840 * Render the Size column of the detail table. 1847 * Render the Size column of the detail table.
1841 * 1848 *
1842 * @param {Entry} entry The Entry object to render. 1849 * @param {Entry} entry The Entry object to render.
1843 * @param {string} columnId The id of the column to be rendered. 1850 * @param {string} columnId The id of the column to be rendered.
1844 * @param {cr.ui.Table} table The table doing the rendering. 1851 * @param {cr.ui.Table} table The table doing the rendering.
1845 */ 1852 */
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after
2853 var path = rootPathNames.join('/') + '/'; 2860 var path = rootPathNames.join('/') + '/';
2854 var doc = this.document_; 2861 var doc = this.document_;
2855 2862
2856 for (var i = 0; i < pathNames.length; i++) { 2863 for (var i = 0; i < pathNames.length; i++) {
2857 var pathName = pathNames[i]; 2864 var pathName = pathNames[i];
2858 path += pathName; 2865 path += pathName;
2859 2866
2860 var div = doc.createElement('div'); 2867 var div = doc.createElement('div');
2861 2868
2862 div.className = 'breadcrumb-path'; 2869 div.className = 'breadcrumb-path';
2863 div.textContent = i == 0 ? this.getRootLabel_(path) : pathName; 2870 div.textContent = i == 0 ? this.getRootLabel_(path) :
SeRya 2012/05/07 14:06:00 You are going to show in breadcrumbs path like "gd
tbarzic 2012/05/10 03:20:47 With the newest version we will modifying breadcru
2871 this.directoryModel_.getDisplayName(path,
2872 pathName);
2864 2873
2865 path = path + '/'; 2874 path = path + '/';
2866 div.path = path; 2875 div.path = path;
2867 2876
2868 bc.appendChild(div); 2877 bc.appendChild(div);
2869 2878
2870 if (i == pathNames.length - 1) { 2879 if (i == pathNames.length - 1 ||
2871 div.classList.add('breadcrumb-last'); 2880 path == util.GDATA_SEARCH_ROOT_PATH + '/') {
2881 div.classList.add('breadcrumb-non-clickable');
2872 } else { 2882 } else {
2873 div.addEventListener('click', this.onBreadcrumbClick_.bind(this)); 2883 div.addEventListener('click', this.onBreadcrumbClick_.bind(this));
2884 }
2874 2885
2886 if (i != pathNames.length - 1) {
2875 var spacer = doc.createElement('div'); 2887 var spacer = doc.createElement('div');
2876 spacer.className = 'separator'; 2888 spacer.className = 'separator';
2877 bc.appendChild(spacer); 2889 bc.appendChild(spacer);
2878 } 2890 }
2879 } 2891 }
2880 this.truncateBreadcrumbs_(); 2892 this.truncateBreadcrumbs_();
2881 }; 2893 };
2882 2894
2883 FileManager.prototype.isRenamingInProgress = function() { 2895 FileManager.prototype.isRenamingInProgress = function() {
2884 return !!this.renameInput_.currentEntry; 2896 return !!this.renameInput_.currentEntry;
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
3371 * Update the UI when the current directory changes. 3383 * Update the UI when the current directory changes.
3372 * 3384 *
3373 * @param {cr.Event} event The directory-changed event. 3385 * @param {cr.Event} event The directory-changed event.
3374 */ 3386 */
3375 FileManager.prototype.onDirectoryChanged_ = function(event) { 3387 FileManager.prototype.onDirectoryChanged_ = function(event) {
3376 this.updateCommonActionButtons_(); 3388 this.updateCommonActionButtons_();
3377 this.updateOkButton_(); 3389 this.updateOkButton_();
3378 this.updateBreadcrumbs_(); 3390 this.updateBreadcrumbs_();
3379 this.updateColumnModel_(); 3391 this.updateColumnModel_();
3380 3392
3393 // We don't want to keep a record in browser history for each key press in
3394 // the search box.
3395 var shouldReplaceHistory =
SeRya 2012/05/07 14:06:00 I think when search query change DirectoryModel mu
tbarzic 2012/05/10 03:20:47 Done.
3396 event.initial ||
3397 (util.isSpecialReadonlyDirectory(event.newDirEntry.fullPath) &&
3398 util.isSpecialReadonlyDirectory(event.previousDirEntry.fullPath));
3399
3381 // Sometimes we rescan the same directory (when mounting GData lazily first, 3400 // Sometimes we rescan the same directory (when mounting GData lazily first,
3382 // then for real). Do not update the location then. 3401 // then for real). Do not update the location then.
3383 if (event.newDirEntry.fullPath != event.previousDirEntry.fullPath) { 3402 if (event.newDirEntry.fullPath != event.previousDirEntry.fullPath) {
3384 this.updateLocation_(event.initial, event.newDirEntry.fullPath); 3403 this.updateLocation_(shouldReplaceHistory, event.newDirEntry.fullPath);
3385 } 3404 }
3386 3405
3387 this.checkFreeSpace_(this.getCurrentDirectory()); 3406 this.checkFreeSpace_(this.getCurrentDirectory());
3388 3407
3389 this.updateTitle_(); 3408 this.updateTitle_();
3390 3409
3391 if (this.filesystemObserverId_) 3410 if (this.filesystemObserverId_)
3392 this.metadataCache_.removeObserver(this.filesystemObserverId_); 3411 this.metadataCache_.removeObserver(this.filesystemObserverId_);
3393 if (this.gdataObserverId_) 3412 if (this.gdataObserverId_)
3394 this.metadataCache_.removeObserver(this.gdataObserverId_); 3413 this.metadataCache_.removeObserver(this.gdataObserverId_);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
3565 nameNode.textContent = entry.name; 3584 nameNode.textContent = entry.name;
3566 this.alert.show(strf('ERROR_RENAMING', entry.name, 3585 this.alert.show(strf('ERROR_RENAMING', entry.name,
3567 util.getFileErrorMnemonic(err.code))); 3586 util.getFileErrorMnemonic(err.code)));
3568 } 3587 }
3569 3588
3570 this.cancelRename_(); 3589 this.cancelRename_();
3571 // Optimistically apply new name immediately to avoid flickering in 3590 // Optimistically apply new name immediately to avoid flickering in
3572 // case of success. 3591 // case of success.
3573 nameNode.textContent = newName; 3592 nameNode.textContent = newName;
3574 3593
3575 this.directoryModel_.doesExist(newName, function(exists, isFile) { 3594 this.directoryModel_.doesExist(entry, newName, function(exists, isFile) {
3576 if (!exists) { 3595 if (!exists) {
3577 this.directoryModel_.renameEntry(entry, newName, onError.bind(this)); 3596 this.directoryModel_.renameEntry(entry, newName, onError.bind(this));
3578 } else { 3597 } else {
3579 nameNode.textContent = entry.name; 3598 nameNode.textContent =
3599 this.directoryModel_.getDisplayName(entry.fullPath, entry.name);
3580 var message = isFile ? 'FILE_ALREADY_EXISTS' : 3600 var message = isFile ? 'FILE_ALREADY_EXISTS' :
3581 'DIRECTORY_ALREADY_EXISTS'; 3601 'DIRECTORY_ALREADY_EXISTS';
3582 this.alert.show(strf(message, newName)); 3602 this.alert.show(strf(message, newName));
3583 } 3603 }
3584 }.bind(this)); 3604 }.bind(this));
3585 }; 3605 };
3586 3606
3587 FileManager.prototype.cancelRename_ = function() { 3607 FileManager.prototype.cancelRename_ = function() {
3588 this.renameInput_.currentEntry = null; 3608 this.renameInput_.currentEntry = null;
3589 3609
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
4255 4275
4256 if (oldValue) { 4276 if (oldValue) {
4257 event.target.removeAttribute('checked'); 4277 event.target.removeAttribute('checked');
4258 } else { 4278 } else {
4259 event.target.setAttribute('checked', 'checked'); 4279 event.target.setAttribute('checked', 'checked');
4260 } 4280 }
4261 }; 4281 };
4262 4282
4263 FileManager.prototype.onSearchBoxUpdate_ = function(event) { 4283 FileManager.prototype.onSearchBoxUpdate_ = function(event) {
4264 var searchString = this.dialogDom_.querySelector('#search-box').value; 4284 var searchString = this.dialogDom_.querySelector('#search-box').value;
4265 if (searchString) { 4285 this.directoryModel_.search(searchString);
4266 this.directoryModel_.addFilter(
4267 'searchbox',
4268 function(e) {
4269 return e.name.substr(0, searchString.length) == searchString;
4270 });
4271 } else {
4272 this.directoryModel_.removeFilter('searchbox');
4273 }
4274 }; 4286 };
4275 4287
4276 FileManager.prototype.decorateSplitter = function(splitterElement) { 4288 FileManager.prototype.decorateSplitter = function(splitterElement) {
4277 var self = this; 4289 var self = this;
4278 4290
4279 var Splitter = cr.ui.Splitter; 4291 var Splitter = cr.ui.Splitter;
4280 4292
4281 var customSplitter = cr.ui.define('div'); 4293 var customSplitter = cr.ui.define('div');
4282 4294
4283 customSplitter.prototype = { 4295 customSplitter.prototype = {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
4397 4409
4398 this.directoryModel_.addEventListener('scan-completed', maybeShowBanner); 4410 this.directoryModel_.addEventListener('scan-completed', maybeShowBanner);
4399 this.directoryModel_.addEventListener('rescan-completed', maybeShowBanner); 4411 this.directoryModel_.addEventListener('rescan-completed', maybeShowBanner);
4400 4412
4401 var style = this.document_.createElement('link'); 4413 var style = this.document_.createElement('link');
4402 style.rel = 'stylesheet'; 4414 style.rel = 'stylesheet';
4403 style.href = 'css/gdrive_welcome.css'; 4415 style.href = 'css/gdrive_welcome.css';
4404 this.document_.head.appendChild(style); 4416 this.document_.head.appendChild(style);
4405 }; 4417 };
4406 })(); 4418 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698