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

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

Issue 7046077: Revert 88510 - Escaping file names correctly. Also fixed a crush in chromeos debug build while sa... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 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
Property Changes:
Added: svn:mergeinfo
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // WK Bug 55728 is fixed on the chrome 12 branch but not on the trunk. 5 // WK Bug 55728 is fixed on the chrome 12 branch but not on the trunk.
6 // TODO(rginda): Enable this everywhere once we have a trunk-worthy fix. 6 // TODO(rginda): Enable this everywhere once we have a trunk-worthy fix.
7 const ENABLE_METADATA = true; 7 const ENABLE_METADATA = true;
8 8
9 // Thumbnail view is painful without the exif reader. 9 // Thumbnail view is painful without the exif reader.
10 const ENABLE_THUMBNAIL_VIEW = ENABLE_METADATA; 10 const ENABLE_THUMBNAIL_VIEW = ENABLE_METADATA;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 this.filterFiles_ = true; 47 this.filterFiles_ = true;
48 48
49 this.commands_ = {}; 49 this.commands_ = {};
50 50
51 this.document_ = dialogDom.ownerDocument; 51 this.document_ = dialogDom.ownerDocument;
52 this.dialogType_ = 52 this.dialogType_ =
53 this.params_.type || FileManager.DialogType.FULL_PAGE; 53 this.params_.type || FileManager.DialogType.FULL_PAGE;
54 54
55 this.defaultPath_ = this.params_.defaultPath || '/'; 55 this.defaultPath_ = this.params_.defaultPath || '/';
56 56
57 // Optional list of file types.
58 this.fileTypes_ = this.params_.typeList;
59
60 // This is set to just the directory portion of defaultPath in initDialogType. 57 // This is set to just the directory portion of defaultPath in initDialogType.
61 this.defaultFolder_ = '/'; 58 this.defaultFolder_ = '/';
62 59
63 this.showCheckboxes_ = 60 this.showCheckboxes_ =
64 (this.dialogType_ == FileManager.DialogType.FULL_PAGE || 61 (this.dialogType_ == FileManager.DialogType.FULL_PAGE ||
65 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE); 62 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE);
66 63
67 // DirectoryEntry representing the current directory of the dialog. 64 // DirectoryEntry representing the current directory of the dialog.
68 this.currentDirEntry_ = null; 65 this.currentDirEntry_ = null;
69 66
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 this.initTable_(); 548 this.initTable_();
552 this.initGrid_(); 549 this.initGrid_();
553 550
554 this.setListType(FileManager.ListType.DETAIL); 551 this.setListType(FileManager.ListType.DETAIL);
555 552
556 this.onResize_(); 553 this.onResize_();
557 this.dialogDom_.style.opacity = '1'; 554 this.dialogDom_.style.opacity = '1';
558 }; 555 };
559 556
560 /** 557 /**
561 * "Save a file" dialog is supposed to have a combo box with available
562 * file types. Selecting an item filters files by extension and specifies how
563 * file should be saved.
564 * @return {intener} Index of selected type from this.fileTypes_ + 1. 0
565 * means value is not specified.
566 */
567 FileManager.prototype.getSelectedFilterIndex_= function(fileName) {
568 // TODO(serya): Implement the combo box
569 // For now try to guess choice by file extension.
570 if (!this.fileTypes_ || this.fileTypes_.length == 0) return 0;
571
572 var extension = /\.[^\.]+$/.exec(fileName);
573 extension = extension ? extension[0].substring(1).toLowerCase() : "";
574 var result = 0; // Use first type by default.
575 for (var i = 0; i < this.fileTypes_.length; i++) {
576 if (this.fileTypes_[i].extensions.indexOf(extension)) {
577 result = i;
578 }
579 }
580 return result + 1; // 1-based index.
581 };
582
583 /**
584 * Force the canExecute events to be dispatched. 558 * Force the canExecute events to be dispatched.
585 */ 559 */
586 FileManager.prototype.updateCommands_ = function() { 560 FileManager.prototype.updateCommands_ = function() {
587 this.commands_['rename'].canExecuteChange(); 561 this.commands_['rename'].canExecuteChange();
588 this.commands_['delete'].canExecuteChange(); 562 this.commands_['delete'].canExecuteChange();
589 }; 563 };
590 564
591 /** 565 /**
592 * Invoked to decide whether the "rename" command can be executed. 566 * Invoked to decide whether the "rename" command can be executed.
593 */ 567 */
(...skipping 1503 matching lines...) Expand 10 before | Expand all | Expand 10 after
2097 if (currentDirUrl.charAt(currentDirUrl.length - 1) != '/') 2071 if (currentDirUrl.charAt(currentDirUrl.length - 1) != '/')
2098 currentDirUrl += '/'; 2072 currentDirUrl += '/';
2099 2073
2100 if (this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE) { 2074 if (this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE) {
2101 // Save-as doesn't require a valid selection from the list, since 2075 // Save-as doesn't require a valid selection from the list, since
2102 // we're going to take the filename from the text input. 2076 // we're going to take the filename from the text input.
2103 var filename = this.filenameInput_.value; 2077 var filename = this.filenameInput_.value;
2104 if (!filename) 2078 if (!filename)
2105 throw new Error('Missing filename!'); 2079 throw new Error('Missing filename!');
2106 2080
2107 chrome.fileBrowserPrivate.selectFile( 2081 chrome.fileBrowserPrivate.selectFile(currentDirUrl + encodeURI(filename),
2108 currentDirUrl + encodeURIComponent(filename), 2082 0);
2109 this.getSelectedFilterIndex_(filename));
2110 window.close(); 2083 window.close();
2111 return; 2084 return;
2112 } 2085 }
2113 2086
2114 var ary = []; 2087 var ary = [];
2115 var selectedIndexes = this.currentList_.selectionModel.selectedIndexes; 2088 var selectedIndexes = this.currentList_.selectionModel.selectedIndexes;
2116 2089
2117 // All other dialog types require at least one selected list item. 2090 // All other dialog types require at least one selected list item.
2118 // The logic to control whether or not the ok button is enabled should 2091 // The logic to control whether or not the ok button is enabled should
2119 // prevent us from ever getting here, but we sanity check to be sure. 2092 // prevent us from ever getting here, but we sanity check to be sure.
2120 if (!selectedIndexes.length) 2093 if (!selectedIndexes.length)
2121 throw new Error('Nothing selected!'); 2094 throw new Error('Nothing selected!');
2122 2095
2123 for (var i = 0; i < selectedIndexes.length; i++) { 2096 for (var i = 0; i < selectedIndexes.length; i++) {
2124 var entry = this.dataModel_.item(selectedIndexes[i]); 2097 var entry = this.dataModel_.item(selectedIndexes[i]);
2125 if (!entry) { 2098 if (!entry) {
2126 console.log('Error locating selected file at index: ' + i); 2099 console.log('Error locating selected file at index: ' + i);
2127 continue; 2100 continue;
2128 } 2101 }
2129 2102
2130 ary.push(currentDirUrl + encodeURIComponent(entry.name)); 2103 ary.push(currentDirUrl + encodeURI(entry.name));
2131 } 2104 }
2132 2105
2133 // Multi-file selection has no other restrictions. 2106 // Multi-file selection has no other restrictions.
2134 if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE) { 2107 if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE) {
2135 chrome.fileBrowserPrivate.selectFiles(ary); 2108 chrome.fileBrowserPrivate.selectFiles(ary);
2136 window.close(); 2109 window.close();
2137 return; 2110 return;
2138 } 2111 }
2139 2112
2140 // In full screen mode, open all files for vieweing. 2113 // In full screen mode, open all files for vieweing.
2141 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) { 2114 if (this.dialogType_ == FileManager.DialogType.FULL_PAGE) {
2142 chrome.fileBrowserPrivate.viewFiles(ary, "default"); 2115 chrome.fileBrowserPrivate.viewFiles(ary, "default");
2143 // Window stays open. 2116 // Window stays open.
2144 return; 2117 return;
2145 } 2118 }
2146 2119
2147 // Everything else must have exactly one. 2120 // Everything else must have exactly one.
2148 if (ary.length > 1) 2121 if (ary.length > 1)
2149 throw new Error('Too many files selected!'); 2122 throw new Error('Too many files selected!');
2150 2123
2151 if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) { 2124 if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) {
2152 if (!this.selection.leadEntry.isDirectory) 2125 if (!this.selection.leadEntry.isDirectory)
2153 throw new Error('Selected entry is not a folder!'); 2126 throw new Error('Selected entry is not a folder!');
2154 } else if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE) { 2127 } else if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE) {
2155 if (!this.selection.leadEntry.isFile) 2128 if (!this.selection.leadEntry.isFile)
2156 throw new Error('Selected entry is not a file!'); 2129 throw new Error('Selected entry is not a file!');
2157 } 2130 }
2158 2131
2159 chrome.fileBrowserPrivate.selectFile( 2132 chrome.fileBrowserPrivate.selectFile(ary[0], 0);
2160 ary[0], this.getSelectedFilterIndex_(ary[0]));
2161 window.close(); 2133 window.close();
2162 }; 2134 };
2163 2135
2164 })(); 2136 })();
OLDNEW
« no previous file with comments | « chrome/browser/extensions/file_manager_util.cc ('k') | chrome/browser/sync/engine/net/url_translator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698