| 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 * The current selection object. | 8 * The current selection object. |
| 9 * | 9 * |
| 10 * @param {FileManager} fileManager FileManager instance. | 10 * @param {FileManager} fileManager FileManager instance. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 82 |
| 83 /** | 83 /** |
| 84 * Computes the total size of selected files. | 84 * Computes the total size of selected files. |
| 85 * | 85 * |
| 86 * @param {function} callback Completion callback. Not called when cancelled, | 86 * @param {function} callback Completion callback. Not called when cancelled, |
| 87 * or a new call has been invoked in the meantime. | 87 * or a new call has been invoked in the meantime. |
| 88 */ | 88 */ |
| 89 FileSelection.prototype.computeBytes = function(callback) { | 89 FileSelection.prototype.computeBytes = function(callback) { |
| 90 if (this.entries.length == 0) { | 90 if (this.entries.length == 0) { |
| 91 this.bytesKnown = true; | 91 this.bytesKnown = true; |
| 92 this.showBytes = false; |
| 92 this.bytes = 0; | 93 this.bytes = 0; |
| 93 return; | 94 return; |
| 94 } | 95 } |
| 95 | 96 |
| 96 var computeBytesSequence = ++this.computeBytesSequence_; | 97 var computeBytesSequence = ++this.computeBytesSequence_; |
| 97 var pendingMetadataCount = 0; | 98 var pendingMetadataCount = 0; |
| 98 | 99 |
| 99 var maybeDone = function() { | 100 var maybeDone = function() { |
| 100 if (pendingMetadataCount == 0) { | 101 if (pendingMetadataCount == 0) { |
| 101 this.bytesKnown = true; | 102 this.bytesKnown = true; |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 } | 209 } |
| 209 } | 210 } |
| 210 | 211 |
| 211 this.updateOkButton(); | 212 this.updateOkButton(); |
| 212 | 213 |
| 213 if (this.selectionUpdateTimer_) { | 214 if (this.selectionUpdateTimer_) { |
| 214 clearTimeout(this.selectionUpdateTimer_); | 215 clearTimeout(this.selectionUpdateTimer_); |
| 215 this.selectionUpdateTimer_ = null; | 216 this.selectionUpdateTimer_ = null; |
| 216 } | 217 } |
| 217 | 218 |
| 218 if (!indexes.length) { | 219 if (!util.platform.newUI() && !indexes.length) { |
| 219 this.updatePreviewPanelVisibility_(); | 220 this.updatePreviewPanelVisibility_(); |
| 220 this.updatePreviewPanelText_(); | 221 this.updatePreviewPanelText_(); |
| 221 this.fileManager_.updateContextMenuActionItems(null, false); | 222 this.fileManager_.updateContextMenuActionItems(null, false); |
| 222 return; | 223 return; |
| 223 } | 224 } |
| 224 | 225 |
| 225 this.hideCalculating_(); | 226 this.hideCalculating_(); |
| 226 | 227 |
| 227 // The rest of the selection properties are computed via (sometimes lengthy) | 228 // The rest of the selection properties are computed via (sometimes lengthy) |
| 228 // asynchronous calls. We initiate these calls after a timeout. If the | 229 // asynchronous calls. We initiate these calls after a timeout. If the |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 | 310 |
| 310 /** | 311 /** |
| 311 * Animates preview panel show/hide transitions. | 312 * Animates preview panel show/hide transitions. |
| 312 * | 313 * |
| 313 * @private | 314 * @private |
| 314 */ | 315 */ |
| 315 FileSelectionHandler.prototype.updatePreviewPanelVisibility_ = function() { | 316 FileSelectionHandler.prototype.updatePreviewPanelVisibility_ = function() { |
| 316 var panel = this.previewPanel_; | 317 var panel = this.previewPanel_; |
| 317 var state = panel.getAttribute('visibility'); | 318 var state = panel.getAttribute('visibility'); |
| 318 var mustBeVisible = (this.selection.totalCount > 0); | 319 var mustBeVisible = (this.selection.totalCount > 0); |
| 320 if (util.platform.newUI()) { |
| 321 mustBeVisible = (this.selection.totalCount > 0 || |
| 322 !PathUtil.isRootPath(this.fileManager_.getCurrentDirectory())); |
| 323 } |
| 319 var self = this; | 324 var self = this; |
| 320 var fm = this.fileManager_; | 325 var fm = this.fileManager_; |
| 321 | 326 |
| 322 var stopHidingAndShow = function() { | 327 var stopHidingAndShow = function() { |
| 323 clearTimeout(self.hidingTimeout_); | 328 clearTimeout(self.hidingTimeout_); |
| 324 self.hidingTimeout_ = 0; | 329 self.hidingTimeout_ = 0; |
| 325 setVisibility('visible'); | 330 setVisibility('visible'); |
| 326 }; | 331 }; |
| 327 | 332 |
| 328 var startHiding = function() { | 333 var startHiding = function() { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 return this.previewPanel_.getAttribute('visibility') != 'hidden'; | 374 return this.previewPanel_.getAttribute('visibility') != 'hidden'; |
| 370 }; | 375 }; |
| 371 | 376 |
| 372 /** | 377 /** |
| 373 * Update the selection summary in preview panel. | 378 * Update the selection summary in preview panel. |
| 374 * | 379 * |
| 375 * @private | 380 * @private |
| 376 */ | 381 */ |
| 377 FileSelectionHandler.prototype.updatePreviewPanelText_ = function() { | 382 FileSelectionHandler.prototype.updatePreviewPanelText_ = function() { |
| 378 var selection = this.selection; | 383 var selection = this.selection; |
| 379 if (selection.totalCount == 0) { | 384 if (!util.platform.newUI()) { |
| 380 // We dont want to change the string during preview panel animating away. | 385 if (selection.totalCount == 0) { |
| 381 return; | 386 // We dont want to change the string during preview panel animating |
| 387 return; |
| 388 } |
| 389 } else { |
| 390 if (selection.totalCount <= 1) { |
| 391 // Hides the preview text if zero or one file is selected. We shows a |
| 392 // breadcrumb list instead on the preview panel. |
| 393 this.hideCalculating_(); |
| 394 this.previewText_.textContent = ''; |
| 395 return; |
| 396 } |
| 382 } | 397 } |
| 383 | 398 |
| 384 var text = ''; | 399 var text = ''; |
| 385 if (selection.totalCount == 1) { | 400 if (selection.totalCount == 1) { |
| 386 text = selection.entries[0].name; | 401 text = selection.entries[0].name; |
| 387 } else if (selection.directoryCount == 0) { | 402 } else if (selection.directoryCount == 0) { |
| 388 text = strf('MANY_FILES_SELECTED', selection.fileCount); | 403 text = strf('MANY_FILES_SELECTED', selection.fileCount); |
| 389 } else if (selection.fileCount == 0) { | 404 } else if (selection.fileCount == 0) { |
| 390 text = strf('MANY_DIRECTORIES_SELECTED', selection.directoryCount); | 405 text = strf('MANY_DIRECTORIES_SELECTED', selection.directoryCount); |
| 391 } else { | 406 } else { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 if (this.fileManager_.dialogType == DialogType.FULL_PAGE && | 485 if (this.fileManager_.dialogType == DialogType.FULL_PAGE && |
| 471 selection.directoryCount == 0 && selection.fileCount > 0) { | 486 selection.directoryCount == 0 && selection.fileCount > 0) { |
| 472 selection.createTasks(onTasks); | 487 selection.createTasks(onTasks); |
| 473 } else { | 488 } else { |
| 474 this.taskItems_.hidden = true; | 489 this.taskItems_.hidden = true; |
| 475 } | 490 } |
| 476 | 491 |
| 477 // Update the UI. | 492 // Update the UI. |
| 478 var wasVisible = this.isPreviewPanelVisibile_(); | 493 var wasVisible = this.isPreviewPanelVisibile_(); |
| 479 this.updatePreviewPanelVisibility_(); | 494 this.updatePreviewPanelVisibility_(); |
| 480 this.updateSearchBreadcrumbs_(); | 495 |
| 496 if (util.platform.newUI() && selection.totalCount == 0) { |
| 497 var path = this.fileManager_.getCurrentDirectory(); |
| 498 // Hides the breadcrumbs list on the root path. |
| 499 if (PathUtil.isRootPath(path)) |
| 500 this.updatePreviewPanelBreadcrumbs_(null); |
| 501 else |
| 502 this.updatePreviewPanelBreadcrumbs_(path); |
| 503 var entry = this.fileManager_.getCurrentDirectoryEntry(); |
| 504 this.showPreviewThumbnails_([entry]); |
| 505 this.updatePreviewPanelText_(); |
| 506 return; |
| 507 } |
| 508 |
| 481 this.fileManager_.updateContextMenuActionItems(null, false); | 509 this.fileManager_.updateContextMenuActionItems(null, false); |
| 482 if (!wasVisible && this.selection.totalCount == 1) { | 510 if (!wasVisible && this.selection.totalCount == 1) { |
| 483 var list = this.fileManager_.getCurrentList(); | 511 var list = this.fileManager_.getCurrentList(); |
| 484 list.scrollIndexIntoView(list.selectionModel.selectedIndex); | 512 list.scrollIndexIntoView(list.selectionModel.selectedIndex); |
| 485 } | 513 } |
| 486 | 514 |
| 487 // Sync the commands availability. | 515 // Sync the commands availability. |
| 488 var commands = this.fileManager_.dialogDom_.querySelectorAll('command'); | 516 var commands = this.fileManager_.dialogDom_.querySelectorAll('command'); |
| 489 for (var i = 0; i < commands.length; i++) | 517 for (var i = 0; i < commands.length; i++) |
| 490 commands[i].canExecuteChange(); | 518 commands[i].canExecuteChange(); |
| 491 | 519 |
| 492 // Update the summary information. | 520 if (!util.platform.newUI()) { |
| 493 var onBytes = function() { | 521 this.updateSearchBreadcrumbs_(); |
| 494 if (this.selection != selection) return; | 522 // Update the summary information. |
| 523 var onBytes = function() { |
| 524 if (this.selection != selection) return; |
| 525 this.updatePreviewPanelText_(); |
| 526 }.bind(this); |
| 527 selection.computeBytes(onBytes); |
| 495 this.updatePreviewPanelText_(); | 528 this.updatePreviewPanelText_(); |
| 496 }.bind(this); | 529 } else { |
| 497 selection.computeBytes(onBytes); | 530 if (selection.totalCount == 1) { |
| 498 this.updatePreviewPanelText_(); | 531 // Shows the breadcrumb list. |
| 532 var firstEntry = selection.entries[0]; |
| 533 this.updatePreviewPanelBreadcrumbs_(firstEntry.fullPath); |
| 534 this.updatePreviewPanelText_(); |
| 535 } else { |
| 536 this.updatePreviewPanelBreadcrumbs_(null); |
| 537 |
| 538 // Update the summary information. |
| 539 var onBytes = function() { |
| 540 if (this.selection != selection) return; |
| 541 this.updatePreviewPanelText_(); |
| 542 }.bind(this); |
| 543 selection.computeBytes(onBytes); |
| 544 this.updatePreviewPanelText_(); |
| 545 } |
| 546 } |
| 499 | 547 |
| 500 // Inform tests it's OK to click buttons now. | 548 // Inform tests it's OK to click buttons now. |
| 501 chrome.test.sendMessage('selection-change-complete'); | 549 chrome.test.sendMessage('selection-change-complete'); |
| 502 | 550 |
| 503 // Show thumbnails. | 551 // Show thumbnails. |
| 504 this.showPreviewThumbnails_(selection); | 552 this.showPreviewThumbnails_(selection.entries); |
| 505 }; | 553 }; |
| 506 | 554 |
| 507 /** | 555 /** |
| 508 * Renders preview thumbnails in preview panel. | 556 * Renders preview thumbnails in preview panel. |
| 509 * | 557 * |
| 510 * @param {FileSelection} selection The selection object. | 558 * @param {Array.<FileEntry>} entries The entries of selected object. |
| 511 * @private | 559 * @private |
| 512 */ | 560 */ |
| 513 FileSelectionHandler.prototype.showPreviewThumbnails_ = function(selection) { | 561 FileSelectionHandler.prototype.showPreviewThumbnails_ = function(entries) { |
| 562 var selection = this.selection; |
| 514 var thumbnails = []; | 563 var thumbnails = []; |
| 515 var thumbnailCount = 0; | 564 var thumbnailCount = 0; |
| 516 var thumbnailLoaded = -1; | 565 var thumbnailLoaded = -1; |
| 517 var forcedShowTimeout = null; | 566 var forcedShowTimeout = null; |
| 518 var thumbnailsHaveZoom = false; | 567 var thumbnailsHaveZoom = false; |
| 519 var self = this; | 568 var self = this; |
| 520 | 569 |
| 521 var showThumbnails = function() { | 570 var showThumbnails = function() { |
| 522 // have-zoom class may be updated twice: then timeout exceeds and then | 571 // have-zoom class may be updated twice: then timeout exceeds and then |
| 523 // then all images loaded. | 572 // then all images loaded. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 547 if (thumbnailLoaded == thumbnailCount) | 596 if (thumbnailLoaded == thumbnailCount) |
| 548 showThumbnails(); | 597 showThumbnails(); |
| 549 }; | 598 }; |
| 550 | 599 |
| 551 var thumbnailClickHandler = function() { | 600 var thumbnailClickHandler = function() { |
| 552 if (selection.tasks) | 601 if (selection.tasks) |
| 553 selection.tasks.executeDefault(); | 602 selection.tasks.executeDefault(); |
| 554 }; | 603 }; |
| 555 | 604 |
| 556 var doc = this.fileManager_.document_; | 605 var doc = this.fileManager_.document_; |
| 557 for (var i = 0; i < selection.entries.length; i++) { | 606 for (var i = 0; i < entries.length; i++) { |
| 558 var entry = selection.entries[i]; | 607 var entry = entries[i]; |
| 559 | 608 |
| 560 if (thumbnailCount < FileSelectionHandler.MAX_PREVIEW_THUMBNAIL_COUNT) { | 609 if (thumbnailCount < FileSelectionHandler.MAX_PREVIEW_THUMBNAIL_COUNT) { |
| 561 var box = doc.createElement('div'); | 610 var box = doc.createElement('div'); |
| 562 box.className = 'thumbnail'; | 611 box.className = 'thumbnail'; |
| 563 if (thumbnailCount == 0) { | 612 if (thumbnailCount == 0) { |
| 564 var zoomed = doc.createElement('div'); | 613 var zoomed = doc.createElement('div'); |
| 565 zoomed.hidden = true; | 614 zoomed.hidden = true; |
| 566 thumbnails.push(zoomed); | 615 thumbnails.push(zoomed); |
| 567 var onFirstThumbnailLoaded = function(img, transform) { | 616 var onFirstThumbnailLoaded = function(img, transform) { |
| 568 if (img && self.decorateThumbnailZoom_(zoomed, img, transform)) { | 617 if (img && self.decorateThumbnailZoom_(zoomed, img, transform)) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 FileGrid.decorateThumbnailBox(thumbnail, | 653 FileGrid.decorateThumbnailBox(thumbnail, |
| 605 entry, | 654 entry, |
| 606 this.fileManager_.metadataCache_, | 655 this.fileManager_.metadataCache_, |
| 607 ThumbnailLoader.FillMode.FILL, | 656 ThumbnailLoader.FillMode.FILL, |
| 608 ThumbnailLoader.OptimizationMode.NEVER_DISCARD, | 657 ThumbnailLoader.OptimizationMode.NEVER_DISCARD, |
| 609 callback); | 658 callback); |
| 610 return thumbnail; | 659 return thumbnail; |
| 611 }; | 660 }; |
| 612 | 661 |
| 613 /** | 662 /** |
| 614 * Updates the search breadcrumbs. | 663 * Updates the breadcrumbs in the preview panel. |
| 664 * |
| 665 * @param {?string} path Path to be shown in the breadcrumbs list |
| 666 * @private |
| 667 */ |
| 668 FileSelectionHandler.prototype.updatePreviewPanelBreadcrumbs_ = function(path) { |
| 669 if (!path) |
| 670 this.searchBreadcrumbs_.hide(); |
| 671 else |
| 672 this.searchBreadcrumbs_.show(PathUtil.getRootPath(path), path); |
| 673 }; |
| 674 |
| 675 /** |
| 676 * Updates the search breadcrumbs. This method should not be used in the new ui. |
| 615 * | 677 * |
| 616 * @private | 678 * @private |
| 617 */ | 679 */ |
| 618 FileSelectionHandler.prototype.updateSearchBreadcrumbs_ = function() { | 680 FileSelectionHandler.prototype.updateSearchBreadcrumbs_ = function() { |
| 619 var selectedIndexes = | 681 var selectedIndexes = |
| 620 this.fileManager_.getCurrentList().selectionModel.selectedIndexes; | 682 this.fileManager_.getCurrentList().selectionModel.selectedIndexes; |
| 621 if (selectedIndexes.length !== 1 || | 683 if (selectedIndexes.length !== 1 || |
| 622 !this.fileManager_.directoryModel_.isSearching()) { | 684 !this.fileManager_.directoryModel_.isSearching()) { |
| 623 this.searchBreadcrumbs_.hide(); | 685 this.searchBreadcrumbs_.hide(); |
| 624 return; | 686 return; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 style.left = (boxWidth - imageWidth) / 2 + 'px'; | 758 style.left = (boxWidth - imageWidth) / 2 + 'px'; |
| 697 style.top = (boxHeight - imageHeight) / 2 + 'px'; | 759 style.top = (boxHeight - imageHeight) / 2 + 'px'; |
| 698 style.position = 'relative'; | 760 style.position = 'relative'; |
| 699 | 761 |
| 700 util.applyTransform(largeImage, transform); | 762 util.applyTransform(largeImage, transform); |
| 701 | 763 |
| 702 largeImageBox.appendChild(largeImage); | 764 largeImageBox.appendChild(largeImage); |
| 703 largeImageBox.style.zIndex = 1000; | 765 largeImageBox.style.zIndex = 1000; |
| 704 return true; | 766 return true; |
| 705 }; | 767 }; |
| OLD | NEW |