| Index: chrome/browser/resources/file_manager/js/file_selection.js
|
| diff --git a/chrome/browser/resources/file_manager/js/file_selection.js b/chrome/browser/resources/file_manager/js/file_selection.js
|
| deleted file mode 100644
|
| index 34a75e1a0de05b77e77f3146285f74f678150a23..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/resources/file_manager/js/file_selection.js
|
| +++ /dev/null
|
| @@ -1,366 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -'use strict';
|
| -
|
| -/**
|
| - * The current selection object.
|
| - *
|
| - * @param {FileManager} fileManager FileManager instance.
|
| - * @param {Array.<number>} indexes Selected indexes.
|
| - * @constructor
|
| - */
|
| -function FileSelection(fileManager, indexes) {
|
| - this.fileManager_ = fileManager;
|
| - this.computeBytesSequence_ = 0;
|
| - this.indexes = indexes;
|
| - this.entries = [];
|
| - this.urls = [];
|
| - this.totalCount = 0;
|
| - this.fileCount = 0;
|
| - this.directoryCount = 0;
|
| - this.bytes = 0;
|
| - this.showBytes = false;
|
| - this.allDriveFilesPresent = false,
|
| - this.iconType = null;
|
| - this.bytesKnown = false;
|
| - this.mustBeHidden_ = false;
|
| - this.mimeTypes = null;
|
| -
|
| - // Synchronously compute what we can.
|
| - for (var i = 0; i < this.indexes.length; i++) {
|
| - var entry = fileManager.getFileList().item(this.indexes[i]);
|
| - if (!entry)
|
| - continue;
|
| -
|
| - this.entries.push(entry);
|
| - this.urls.push(entry.toURL());
|
| -
|
| - if (this.iconType == null) {
|
| - this.iconType = FileType.getIcon(entry);
|
| - } else if (this.iconType != 'unknown') {
|
| - var iconType = FileType.getIcon(entry);
|
| - if (this.iconType != iconType)
|
| - this.iconType = 'unknown';
|
| - }
|
| -
|
| - if (entry.isFile) {
|
| - this.fileCount += 1;
|
| - } else {
|
| - this.directoryCount += 1;
|
| - }
|
| - this.totalCount++;
|
| - }
|
| -
|
| - this.tasks = new FileTasks(this.fileManager_);
|
| -
|
| - Object.seal(this);
|
| -}
|
| -
|
| -/**
|
| - * Computes data required to get file tasks and requests the tasks.
|
| - *
|
| - * @param {function} callback The callback.
|
| - */
|
| -FileSelection.prototype.createTasks = function(callback) {
|
| - if (!this.fileManager_.isOnDrive()) {
|
| - this.tasks.init(this.urls);
|
| - callback();
|
| - return;
|
| - }
|
| -
|
| - this.fileManager_.metadataCache_.get(this.urls, 'drive', function(props) {
|
| - var present = props.filter(function(p) { return p && p.availableOffline });
|
| - this.allDriveFilesPresent = present.length == props.length;
|
| -
|
| - // Collect all of the mime types and push that info into the selection.
|
| - this.mimeTypes = props.map(function(value) {
|
| - return (value && value.contentMimeType) || '';
|
| - });
|
| -
|
| - this.tasks.init(this.urls, this.mimeTypes);
|
| - callback();
|
| - }.bind(this));
|
| -};
|
| -
|
| -/**
|
| - * Computes the total size of selected files.
|
| - *
|
| - * @param {function} callback Completion callback. Not called when cancelled,
|
| - * or a new call has been invoked in the meantime.
|
| - */
|
| -FileSelection.prototype.computeBytes = function(callback) {
|
| - if (this.entries.length == 0) {
|
| - this.bytesKnown = true;
|
| - this.showBytes = false;
|
| - this.bytes = 0;
|
| - return;
|
| - }
|
| -
|
| - var computeBytesSequence = ++this.computeBytesSequence_;
|
| - var pendingMetadataCount = 0;
|
| -
|
| - var maybeDone = function() {
|
| - if (pendingMetadataCount == 0) {
|
| - this.bytesKnown = true;
|
| - callback();
|
| - }
|
| - }.bind(this);
|
| -
|
| - var onProps = function(properties) {
|
| - // Ignore if the call got cancelled, or there is another new one fired.
|
| - if (computeBytesSequence != this.computeBytesSequence_)
|
| - return;
|
| -
|
| - // It may happen that the metadata is not available because a file has been
|
| - // deleted in the meantime.
|
| - if (properties)
|
| - this.bytes += properties.size;
|
| - pendingMetadataCount--;
|
| - maybeDone();
|
| - }.bind(this);
|
| -
|
| - for (var index = 0; index < this.entries.length; index++) {
|
| - var entry = this.entries[index];
|
| - if (entry.isFile) {
|
| - this.showBytes |= !FileType.isHosted(entry);
|
| - pendingMetadataCount++;
|
| - this.fileManager_.metadataCache_.get(entry, 'filesystem', onProps);
|
| - } else if (entry.isDirectory) {
|
| - // Don't compute the directory size as it's expensive.
|
| - // crbug.com/179073.
|
| - this.showBytes = false;
|
| - break;
|
| - }
|
| - }
|
| - maybeDone();
|
| -};
|
| -
|
| -/**
|
| - * Cancels any async computation by increasing the sequence number. Results
|
| - * of any previous call to computeBytes() will be discarded.
|
| - *
|
| - * @private
|
| - */
|
| -FileSelection.prototype.cancelComputing_ = function() {
|
| - this.computeBytesSequence_++;
|
| -};
|
| -
|
| -/**
|
| - * This object encapsulates everything related to current selection.
|
| - *
|
| - * @param {FileManager} fileManager File manager instance.
|
| - * @extends {cr.EventTarget}
|
| - * @constructor
|
| - */
|
| -function FileSelectionHandler(fileManager) {
|
| - this.fileManager_ = fileManager;
|
| - // TODO(dgozman): create a shared object with most of UI elements.
|
| - this.okButton_ = fileManager.okButton_;
|
| - this.filenameInput_ = fileManager.filenameInput_;
|
| - this.previewPanel_ = fileManager.previewPanel_;
|
| - this.taskItems_ = fileManager.taskItems_;
|
| -}
|
| -
|
| -/**
|
| - * Create the temporary disabled action menu item.
|
| - * @return {Object} Created disabled item.
|
| - * @private
|
| - */
|
| -FileSelectionHandler.createTemporaryDisabledActionMenuItem_ = function() {
|
| - if (!FileSelectionHandler.cachedDisabledActionMenuItem_) {
|
| - FileSelectionHandler.cachedDisabledActionMenuItem_ = {
|
| - label: str('ACTION_OPEN'),
|
| - disabled: true
|
| - };
|
| - }
|
| -
|
| - return FileSelectionHandler.cachedDisabledActionMenuItem_;
|
| -};
|
| -
|
| -/**
|
| - * Cached the temporary disabled action menu item. Used inside
|
| - * FileSelectionHandler.createTemporaryDisabledActionMenuItem_().
|
| - * @private
|
| - */
|
| -FileSelectionHandler.cachedDisabledActionMenuItem_ = null;
|
| -
|
| -/**
|
| - * FileSelectionHandler extends cr.EventTarget.
|
| - */
|
| -FileSelectionHandler.prototype.__proto__ = cr.EventTarget.prototype;
|
| -
|
| -/**
|
| - * Maximum amount of thumbnails in the preview pane.
|
| - *
|
| - * @const
|
| - * @type {number}
|
| - */
|
| -FileSelectionHandler.MAX_PREVIEW_THUMBNAIL_COUNT = 4;
|
| -
|
| -/**
|
| - * Maximum width or height of an image what pops up when the mouse hovers
|
| - * thumbnail in the bottom panel (in pixels).
|
| - *
|
| - * @const
|
| - * @type {number}
|
| - */
|
| -FileSelectionHandler.IMAGE_HOVER_PREVIEW_SIZE = 200;
|
| -
|
| -/**
|
| - * Update the UI when the selection model changes.
|
| - *
|
| - * @param {Event} event The change event.
|
| - */
|
| -FileSelectionHandler.prototype.onFileSelectionChanged = function(event) {
|
| - var indexes =
|
| - this.fileManager_.getCurrentList().selectionModel.selectedIndexes;
|
| - if (this.selection) this.selection.cancelComputing_();
|
| - var selection = new FileSelection(this.fileManager_, indexes);
|
| - this.selection = selection;
|
| -
|
| - if (this.fileManager_.dialogType == DialogType.SELECT_SAVEAS_FILE) {
|
| - // If this is a save-as dialog, copy the selected file into the filename
|
| - // input text box.
|
| - if (this.selection.totalCount == 1 &&
|
| - this.selection.entries[0].isFile &&
|
| - this.filenameInput_.value != this.selection.entries[0].name) {
|
| - this.filenameInput_.value = this.selection.entries[0].name;
|
| - }
|
| - }
|
| -
|
| - this.updateOkButton();
|
| -
|
| - if (this.selectionUpdateTimer_) {
|
| - clearTimeout(this.selectionUpdateTimer_);
|
| - this.selectionUpdateTimer_ = null;
|
| - }
|
| -
|
| - // The rest of the selection properties are computed via (sometimes lengthy)
|
| - // asynchronous calls. We initiate these calls after a timeout. If the
|
| - // selection is changing quickly we only do this once when it slows down.
|
| -
|
| - var updateDelay = 200;
|
| - var now = Date.now();
|
| - if (now > (this.lastFileSelectionTime_ || 0) + updateDelay) {
|
| - // The previous selection change happened a while ago. Update the UI soon.
|
| - updateDelay = 0;
|
| - }
|
| - this.lastFileSelectionTime_ = now;
|
| -
|
| - if (this.fileManager_.dialogType === DialogType.FULL_PAGE &&
|
| - selection.directoryCount === 0 && selection.fileCount > 0) {
|
| - // Show disabled items for position calculation of the menu. They will be
|
| - // overridden in this.updateFileSelectionAsync().
|
| - this.fileManager_.updateContextMenuActionItems(
|
| - FileSelectionHandler.createTemporaryDisabledActionMenuItem_(), true);
|
| - } else {
|
| - // Update context menu.
|
| - this.fileManager_.updateContextMenuActionItems(null, false);
|
| - }
|
| -
|
| - this.selectionUpdateTimer_ = setTimeout(function() {
|
| - this.selectionUpdateTimer_ = null;
|
| - if (this.selection == selection)
|
| - this.updateFileSelectionAsync(selection);
|
| - }.bind(this), updateDelay);
|
| -};
|
| -
|
| -/**
|
| - * Updates the Ok button enabled state.
|
| - *
|
| - * @return {boolean} Whether button is enabled.
|
| - */
|
| -FileSelectionHandler.prototype.updateOkButton = function() {
|
| - var selectable;
|
| - var dialogType = this.fileManager_.dialogType;
|
| -
|
| - if (dialogType == DialogType.SELECT_FOLDER ||
|
| - dialogType == DialogType.SELECT_UPLOAD_FOLDER) {
|
| - // In SELECT_FOLDER mode, we allow to select current directory
|
| - // when nothing is selected.
|
| - selectable = this.selection.directoryCount <= 1 &&
|
| - this.selection.fileCount == 0;
|
| - } else if (dialogType == DialogType.SELECT_OPEN_FILE) {
|
| - selectable = (this.isFileSelectionAvailable() &&
|
| - this.selection.directoryCount == 0 &&
|
| - this.selection.fileCount == 1);
|
| - } else if (dialogType == DialogType.SELECT_OPEN_MULTI_FILE) {
|
| - selectable = (this.isFileSelectionAvailable() &&
|
| - this.selection.directoryCount == 0 &&
|
| - this.selection.fileCount >= 1);
|
| - } else if (dialogType == DialogType.SELECT_SAVEAS_FILE) {
|
| - if (this.fileManager_.isOnReadonlyDirectory()) {
|
| - selectable = false;
|
| - } else {
|
| - selectable = !!this.filenameInput_.value;
|
| - }
|
| - } else if (dialogType == DialogType.FULL_PAGE) {
|
| - // No "select" buttons on the full page UI.
|
| - selectable = true;
|
| - } else {
|
| - throw new Error('Unknown dialog type');
|
| - }
|
| -
|
| - this.okButton_.disabled = !selectable;
|
| - return selectable;
|
| -};
|
| -
|
| -/**
|
| - * Check if all the files in the current selection are available. The only
|
| - * case when files might be not available is when the selection contains
|
| - * uncached Drive files and the browser is offline.
|
| - *
|
| - * @return {boolean} True if all files in the current selection are
|
| - * available.
|
| - */
|
| -FileSelectionHandler.prototype.isFileSelectionAvailable = function() {
|
| - return !this.fileManager_.isOnDrive() ||
|
| - !this.fileManager_.isDriveOffline() ||
|
| - this.selection.allDriveFilesPresent;
|
| -};
|
| -
|
| -/**
|
| - * Calculates async selection stats and updates secondary UI elements.
|
| - *
|
| - * @param {FileSelection} selection The selection object.
|
| - */
|
| -FileSelectionHandler.prototype.updateFileSelectionAsync = function(selection) {
|
| - if (this.selection != selection) return;
|
| -
|
| - // Update the file tasks.
|
| - if (this.fileManager_.dialogType === DialogType.FULL_PAGE &&
|
| - selection.directoryCount === 0 && selection.fileCount > 0) {
|
| - selection.createTasks(function() {
|
| - if (this.selection != selection)
|
| - return;
|
| - selection.tasks.display(this.taskItems_);
|
| - selection.tasks.updateMenuItem();
|
| - }.bind(this));
|
| - } else {
|
| - this.taskItems_.hidden = true;
|
| - }
|
| -
|
| - // Update preview panels.
|
| - var wasVisible = this.previewPanel_.visible;
|
| - this.previewPanel_.setSelection(selection);
|
| - this.previewPanel_.thumbnails.selection = (selection.totalCount != 0) ?
|
| - selection :
|
| - {entries: [this.fileManager_.getCurrentDirectoryEntry()]};
|
| -
|
| - // Scroll to item
|
| - if (!wasVisible && this.selection.totalCount == 1) {
|
| - var list = this.fileManager_.getCurrentList();
|
| - list.scrollIndexIntoView(list.selectionModel.selectedIndex);
|
| - }
|
| -
|
| - // Sync the commands availability.
|
| - if (this.fileManager_.commandHandler)
|
| - this.fileManager_.commandHandler.updateAvailability();
|
| -
|
| - // Inform tests it's OK to click buttons now.
|
| - if (selection.totalCount > 0) {
|
| - chrome.test.sendMessage('selection-change-complete');
|
| - }
|
| -};
|
|
|