| OLD | NEW |
| 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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * FileManager constructor. | 8 * FileManager constructor. |
| 9 * | 9 * |
| 10 * FileManager objects encapsulate the functionality of the file selector | 10 * FileManager objects encapsulate the functionality of the file selector |
| (...skipping 2398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2409 }; | 2409 }; |
| 2410 | 2410 |
| 2411 FileManager.prototype.initiateRename = function() { | 2411 FileManager.prototype.initiateRename = function() { |
| 2412 var item = this.currentList_.ensureLeadItemExists(); | 2412 var item = this.currentList_.ensureLeadItemExists(); |
| 2413 if (!item) | 2413 if (!item) |
| 2414 return; | 2414 return; |
| 2415 var label = item.querySelector('.filename-label'); | 2415 var label = item.querySelector('.filename-label'); |
| 2416 var input = this.renameInput_; | 2416 var input = this.renameInput_; |
| 2417 | 2417 |
| 2418 input.value = label.textContent; | 2418 input.value = label.textContent; |
| 2419 label.parentNode.setAttribute('renaming', ''); | 2419 item.setAttribute('renaming', ''); |
| 2420 label.parentNode.appendChild(input); | 2420 label.parentNode.appendChild(input); |
| 2421 input.focus(); | 2421 input.focus(); |
| 2422 var selectionEnd = input.value.lastIndexOf('.'); | 2422 var selectionEnd = input.value.lastIndexOf('.'); |
| 2423 if (selectionEnd == -1) { | 2423 if (selectionEnd == -1) { |
| 2424 input.select(); | 2424 input.select(); |
| 2425 } else { | 2425 } else { |
| 2426 input.selectionStart = 0; | 2426 input.selectionStart = 0; |
| 2427 input.selectionEnd = selectionEnd; | 2427 input.selectionEnd = selectionEnd; |
| 2428 } | 2428 } |
| 2429 | 2429 |
| 2430 // This has to be set late in the process so we don't handle spurious | 2430 // This has to be set late in the process so we don't handle spurious |
| 2431 // blur events. | 2431 // blur events. |
| 2432 input.currentEntry = this.currentList_.dataModel.item(item.listIndex); | 2432 input.currentEntry = this.currentList_.dataModel.item(item.listIndex); |
| 2433 this.table_.startBatchUpdates(); |
| 2434 this.grid_.startBatchUpdates(); |
| 2433 }; | 2435 }; |
| 2434 | 2436 |
| 2435 /** | 2437 /** |
| 2436 * @type {Event} Key event. | 2438 * @type {Event} Key event. |
| 2437 * @private | 2439 * @private |
| 2438 */ | 2440 */ |
| 2439 FileManager.prototype.onRenameInputKeyDown_ = function(event) { | 2441 FileManager.prototype.onRenameInputKeyDown_ = function(event) { |
| 2440 if (!this.isRenamingInProgress()) | 2442 if (!this.isRenamingInProgress()) |
| 2441 return; | 2443 return; |
| 2442 | 2444 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2473 FileManager.prototype.commitRename_ = function() { | 2475 FileManager.prototype.commitRename_ = function() { |
| 2474 var input = this.renameInput_; | 2476 var input = this.renameInput_; |
| 2475 var entry = input.currentEntry; | 2477 var entry = input.currentEntry; |
| 2476 var newName = input.value; | 2478 var newName = input.value; |
| 2477 | 2479 |
| 2478 if (newName == entry.name) { | 2480 if (newName == entry.name) { |
| 2479 this.cancelRename_(); | 2481 this.cancelRename_(); |
| 2480 return; | 2482 return; |
| 2481 } | 2483 } |
| 2482 | 2484 |
| 2483 var nameNode = this.findListItemForNode_(this.renameInput_). | 2485 var renamedItemElement = this.findListItemForNode_(this.renameInput_); |
| 2484 querySelector('.filename-label'); | 2486 var nameNode = renamedItemElement.querySelector('.filename-label'); |
| 2485 | 2487 |
| 2486 input.validation_ = true; | 2488 input.validation_ = true; |
| 2487 var validationDone = function(valid) { | 2489 var validationDone = function(valid) { |
| 2488 input.validation_ = false; | 2490 input.validation_ = false; |
| 2489 // Alert dialog restores focus unless the item removed from DOM. | 2491 |
| 2490 if (this.document_.activeElement != input) | 2492 if (!valid) { |
| 2491 this.cancelRename_(); | 2493 // Cancel rename if it fails to restore focus from alert dialog. |
| 2492 if (!valid) | 2494 // Otherwise, just cancel the commitment and continue to rename. |
| 2495 if (this.document_.activeElement != input) |
| 2496 this.cancelRename_(); |
| 2493 return; | 2497 return; |
| 2498 } |
| 2494 | 2499 |
| 2495 // Validation succeeded. Do renaming. | 2500 // Validation succeeded. Do renaming. |
| 2501 this.renameInput_.currentEntry = null; |
| 2502 if (this.renameInput_.parentNode) |
| 2503 this.renameInput_.parentNode.removeChild(this.renameInput_); |
| 2504 renamedItemElement.setAttribute('renaming', 'provisional'); |
| 2496 | 2505 |
| 2497 this.cancelRename_(); | |
| 2498 // Optimistically apply new name immediately to avoid flickering in | 2506 // Optimistically apply new name immediately to avoid flickering in |
| 2499 // case of success. | 2507 // case of success. |
| 2500 nameNode.textContent = newName; | 2508 nameNode.textContent = newName; |
| 2501 | 2509 |
| 2502 util.rename( | 2510 util.rename( |
| 2503 entry, newName, | 2511 entry, newName, |
| 2504 function(newEntry) { | 2512 function(newEntry) { |
| 2505 this.directoryModel_.onRenameEntry(entry, newEntry); | 2513 this.directoryModel_.onRenameEntry(entry, newEntry); |
| 2514 renamedItemElement.removeAttribute('renaming'); |
| 2515 this.table_.endBatchUpdates(); |
| 2516 this.grid_.endBatchUpdates(); |
| 2506 }.bind(this), | 2517 }.bind(this), |
| 2507 function(error) { | 2518 function(error) { |
| 2508 // Write back to the old name. | 2519 // Write back to the old name. |
| 2509 nameNode.textContent = entry.name; | 2520 nameNode.textContent = entry.name; |
| 2521 renamedItemElement.removeAttribute('renaming'); |
| 2522 this.table_.endBatchUpdates(); |
| 2523 this.grid_.endBatchUpdates(); |
| 2510 | 2524 |
| 2511 // Show error dialog. | 2525 // Show error dialog. |
| 2512 var message; | 2526 var message; |
| 2513 if (error.name == util.FileError.PATH_EXISTS_ERR || | 2527 if (error.name == util.FileError.PATH_EXISTS_ERR || |
| 2514 error.name == util.FileError.TYPE_MISMATCH_ERR) { | 2528 error.name == util.FileError.TYPE_MISMATCH_ERR) { |
| 2515 // Check the existing entry is file or not. | 2529 // Check the existing entry is file or not. |
| 2516 // 1) If the entry is a file: | 2530 // 1) If the entry is a file: |
| 2517 // a) If we get PATH_EXISTS_ERR, a file exists. | 2531 // a) If we get PATH_EXISTS_ERR, a file exists. |
| 2518 // b) If we get TYPE_MISMATCH_ERR, a directory exists. | 2532 // b) If we get TYPE_MISMATCH_ERR, a directory exists. |
| 2519 // 2) If the entry is a directory: | 2533 // 2) If the entry is a directory: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2543 newName, | 2557 newName, |
| 2544 validationDone.bind(this)); | 2558 validationDone.bind(this)); |
| 2545 }; | 2559 }; |
| 2546 | 2560 |
| 2547 /** | 2561 /** |
| 2548 * @private | 2562 * @private |
| 2549 */ | 2563 */ |
| 2550 FileManager.prototype.cancelRename_ = function() { | 2564 FileManager.prototype.cancelRename_ = function() { |
| 2551 this.renameInput_.currentEntry = null; | 2565 this.renameInput_.currentEntry = null; |
| 2552 | 2566 |
| 2567 var item = this.findListItemForNode_(this.renameInput_); |
| 2568 if (item) |
| 2569 item.removeAttribute('renaming'); |
| 2570 |
| 2553 var parent = this.renameInput_.parentNode; | 2571 var parent = this.renameInput_.parentNode; |
| 2554 if (parent) { | 2572 if (parent) |
| 2555 parent.removeAttribute('renaming'); | |
| 2556 parent.removeChild(this.renameInput_); | 2573 parent.removeChild(this.renameInput_); |
| 2557 } | 2574 |
| 2575 this.table_.endBatchUpdates(); |
| 2576 this.grid_.endBatchUpdates(); |
| 2558 }; | 2577 }; |
| 2559 | 2578 |
| 2560 /** | 2579 /** |
| 2561 * @param {Event} Key event. | 2580 * @param {Event} Key event. |
| 2562 * @private | 2581 * @private |
| 2563 */ | 2582 */ |
| 2564 FileManager.prototype.onFilenameInputInput_ = function() { | 2583 FileManager.prototype.onFilenameInputInput_ = function() { |
| 2565 this.selectionHandler_.updateOkButton(); | 2584 this.selectionHandler_.updateOkButton(); |
| 2566 }; | 2585 }; |
| 2567 | 2586 |
| (...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3716 callback(this.preferences_); | 3735 callback(this.preferences_); |
| 3717 return; | 3736 return; |
| 3718 } | 3737 } |
| 3719 | 3738 |
| 3720 chrome.fileBrowserPrivate.getPreferences(function(prefs) { | 3739 chrome.fileBrowserPrivate.getPreferences(function(prefs) { |
| 3721 this.preferences_ = prefs; | 3740 this.preferences_ = prefs; |
| 3722 callback(prefs); | 3741 callback(prefs); |
| 3723 }.bind(this)); | 3742 }.bind(this)); |
| 3724 }; | 3743 }; |
| 3725 })(); | 3744 })(); |
| OLD | NEW |