| Index: ui/file_manager/file_manager/foreground/js/search_controller.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/search_controller.js b/ui/file_manager/file_manager/foreground/js/search_controller.js
|
| deleted file mode 100644
|
| index 23c9bd21fe54d5bab7af7960a4337f08060ec66c..0000000000000000000000000000000000000000
|
| --- a/ui/file_manager/file_manager/foreground/js/search_controller.js
|
| +++ /dev/null
|
| @@ -1,269 +0,0 @@
|
| -// Copyright 2014 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';
|
| -
|
| -/**
|
| - * Controller for searching.
|
| - * @param {SearchBox} searchBox Search box UI element.
|
| - * @param {LocationLine} locationLine Location line UI element.
|
| - * @param {DirectoryModel} directoryModel Directory model.
|
| - * @param {{doAction: function(FileEntry)}} taskController Task controller to
|
| - * execute the selected item.
|
| - * @constructor
|
| - */
|
| -function SearchController(
|
| - searchBox, locationLine, directoryModel, volumeManager, taskController) {
|
| - /**
|
| - * @type {SearchBox}
|
| - * @private
|
| - */
|
| - this.searchBox_ = searchBox;
|
| -
|
| - /**
|
| - * @type {LocationLine}
|
| - * @private
|
| - */
|
| - this.locationLine_ = locationLine;
|
| -
|
| - /**
|
| - * @type {DirectoryModel}
|
| - * @private
|
| - */
|
| - this.directoryModel_ = directoryModel;
|
| -
|
| - /**
|
| - * @type {VolumeManager}
|
| - * @private
|
| - */
|
| - this.volumeManager_ = volumeManager;
|
| -
|
| - /**
|
| - * @type {{doAction: function(FileEntry)}}
|
| - * @private
|
| - */
|
| - this.taskController_ = taskController;
|
| -
|
| - searchBox.addEventListener(
|
| - SearchBox.EventType.TEXT_CHANGE, this.onTextChange_.bind(this));
|
| - searchBox.addEventListener(
|
| - SearchBox.EventType.ITEM_SELECT, this.onItemSelect_.bind(this));
|
| -}
|
| -
|
| -SearchController.prototype = {
|
| - /**
|
| - * Obtains current directory's locaiton info.
|
| - * @type {EntryLocation}
|
| - * @private
|
| - */
|
| - get currentLocationInfo_() {
|
| - var entry = this.directoryModel_.getCurrentDirEntry();
|
| - return entry && this.volumeManager_.getLocationInfo(entry);
|
| - },
|
| -
|
| - /**
|
| - * Whether the current directory is on drive or not.
|
| - * @private
|
| - */
|
| - get isOnDrive_() {
|
| - var currentLocationInfo = this.currentLocationInfo_;
|
| - return currentLocationInfo && currentLocationInfo.isDriveBased;
|
| - }
|
| -};
|
| -
|
| -/**
|
| - * Clears the search state.
|
| - */
|
| -SearchController.prototype.clear = function() {
|
| - this.lastSearchQuery_ = '';
|
| - this.searchBox_.clear();
|
| -};
|
| -
|
| -/**
|
| - * Handles text change event.
|
| - * @private
|
| - */
|
| -SearchController.prototype.onTextChange_ = function() {
|
| - var searchString = this.searchBox_.inputElement.value.trimLeft();
|
| -
|
| - // On drive, incremental search is not invoked since we have an auto-
|
| - // complete suggestion instead.
|
| - if (!this.isOnDrive_) {
|
| - this.search_(searchString);
|
| - return;
|
| - }
|
| -
|
| - // When the search text is changed, finishes the search and showes back
|
| - // the last directory by passing an empty string to
|
| - // {@code DirectoryModel.search()}.
|
| - if (this.directoryModel_.isSearching() &&
|
| - this.lastSearchQuery_ != searchString) {
|
| - this.lastSearchQuery_ = '';
|
| - this.directoryModel_.search('', function() {}, function() {});
|
| - }
|
| -
|
| - this.requestAutocompleteSuggestions_();
|
| -};
|
| -
|
| -/**
|
| - * Updates autocompletion items.
|
| - * @private
|
| - */
|
| -SearchController.prototype.requestAutocompleteSuggestions_ = function() {
|
| - // Remember the most recent query. If there is an other request in progress,
|
| - // then it's result will be discarded and it will call a new request for
|
| - // this query.
|
| - var searchString = this.searchBox_.inputElement.value.trimLeft();
|
| - this.lastAutocompleteQuery_ = searchString;
|
| - if (this.autocompleteSuggestionsBusy_)
|
| - return;
|
| -
|
| - // Clear search if the query empty.
|
| - if (!searchString) {
|
| - this.searchBox_.autocompleteList.suggestions = [];
|
| - return;
|
| - }
|
| -
|
| - // Add header item.
|
| - var headerItem = {isHeaderItem: true, searchQuery: searchString};
|
| - if (!this.searchBox_.autocompleteList.dataModel ||
|
| - this.searchBox_.autocompleteList.dataModel.length == 0) {
|
| - this.searchBox_.autocompleteList.suggestions = [headerItem];
|
| - } else {
|
| - // Updates only the head item to prevent a flickering on typing.
|
| - this.searchBox_.autocompleteList.dataModel.splice(0, 1, headerItem);
|
| - }
|
| -
|
| - // The autocomplete list should be resized and repositioned here as the
|
| - // search box is resized when it's focused.
|
| - this.searchBox_.autocompleteList.syncWidthAndPositionToInput();
|
| - this.autocompleteSuggestionsBusy_ = true;
|
| -
|
| - chrome.fileManagerPrivate.searchDriveMetadata(
|
| - {
|
| - query: searchString,
|
| - types: 'ALL',
|
| - maxResults: 4
|
| - },
|
| - function(suggestions) {
|
| - this.autocompleteSuggestionsBusy_ = false;
|
| -
|
| - // Discard results for previous requests and fire a new search
|
| - // for the most recent query.
|
| - if (searchString != this.lastAutocompleteQuery_) {
|
| - this.requestAutocompleteSuggestions_(this.lastAutocompleteQuery_);
|
| - return;
|
| - }
|
| -
|
| - // Keeps the items in the suggestion list.
|
| - this.searchBox_.autocompleteList.suggestions =
|
| - [headerItem].concat(suggestions);
|
| - }.bind(this));
|
| -};
|
| -
|
| -/**
|
| - * Opens the currently selected suggestion item.
|
| - * @private
|
| - */
|
| -SearchController.prototype.onItemSelect_ = function() {
|
| - var selectedItem = this.searchBox_.autocompleteList.selectedItem;
|
| -
|
| - // Clear the current auto complete list.
|
| - this.lastAutocompleteQuery_ = '';
|
| - this.searchBox_.autocompleteList.suggestions = [];
|
| -
|
| - // If the entry is the search item or no entry is selected, just change to
|
| - // the search result.
|
| - if (!selectedItem || selectedItem.isHeaderItem) {
|
| - var query = selectedItem ?
|
| - selectedItem.searchQuery : this.searchBox_.inputElement.value;
|
| - this.search_(query);
|
| - return;
|
| - }
|
| -
|
| - // Clear the search box if an item except for the search item is
|
| - // selected. Eventually the following directory change clears the search box,
|
| - // but if the selected item is located just under /drive/other, the current
|
| - // directory will not changed. For handling the case, and for improving
|
| - // response time, clear the text manually here.
|
| - this.clear();
|
| -
|
| - // If the entry is a directory, just change the directory.
|
| - var entry = selectedItem.entry;
|
| - if (entry.isDirectory) {
|
| - this.directoryModel_.changeDirectoryEntry(entry);
|
| - return;
|
| - }
|
| -
|
| - // Change the current directory to the directory that contains the
|
| - // selected file. Note that this is necessary for an image or a video,
|
| - // which should be opened in the gallery mode, as the gallery mode
|
| - // requires the entry to be in the current directory model. For
|
| - // consistency, the current directory is always changed regardless of
|
| - // the file type.
|
| - entry.getParent(function(parentEntry) {
|
| - // Check if the parent entry points /drive/other or not.
|
| - // If so it just opens the file.
|
| - var locationInfo = this.volumeManager_.getLocationInfo(parentEntry);
|
| - if (!locationInfo ||
|
| - (locationInfo.isRootEntry &&
|
| - locationInfo.rootType === VolumeManagerCommon.RootType.DRIVE_OTHER)) {
|
| - this.taskController_.doAction(entry);
|
| - return;
|
| - }
|
| - // If the parent entry can be /drive/other.
|
| - this.directoryModel_.changeDirectoryEntry(
|
| - parentEntry,
|
| - function() {
|
| - this.directoryModel_.selectEntry(entry);
|
| - this.taskController_.doAction(entry);
|
| - }.bind(this));
|
| - }.bind(this));
|
| -};
|
| -
|
| -/**
|
| - * Search files and update the list with the search result.
|
| - * @param {string} searchString String to be searched with.
|
| - * @private
|
| - */
|
| -SearchController.prototype.search_ = function(searchString) {
|
| - var noResultsDiv = this.searchBox_.noResultMessage;
|
| -
|
| - var reportEmptySearchResults = function() {
|
| - if (this.directoryModel_.getFileList().length === 0) {
|
| - // The string 'SEARCH_NO_MATCHING_FILES_HTML' may contain HTML tags,
|
| - // hence we escapes |searchString| here.
|
| - var html = strf(
|
| - 'SEARCH_NO_MATCHING_FILES_HTML',
|
| - util.htmlEscape(searchString));
|
| - noResultsDiv.innerHTML = html;
|
| - noResultsDiv.setAttribute('show', 'true');
|
| - } else {
|
| - noResultsDiv.removeAttribute('show');
|
| - }
|
| -
|
| - // If the current location is somewhere in Drive, all files in Drive can
|
| - // be listed as search results regardless of current location.
|
| - // In this case, showing current location is confusing, so use the Drive
|
| - // root "My Drive" as the current location.
|
| - if (this.isOnDrive_) {
|
| - var locationInfo = this.currentLocationInfo_;
|
| - var rootEntry = locationInfo.volumeInfo.displayRoot;
|
| - if (rootEntry)
|
| - this.locationLine_.show(rootEntry);
|
| - }
|
| - };
|
| -
|
| - var hideNoResultsDiv = function() {
|
| - noResultsDiv.removeAttribute('show');
|
| - this.locationLine_.show(
|
| - this.directoryModel_.getCurrentDirEntry());
|
| - };
|
| -
|
| - this.lastSearchQuery_ = searchString;
|
| - this.directoryModel_.search(
|
| - searchString,
|
| - reportEmptySearchResults.bind(this),
|
| - hideNoResultsDiv.bind(this));
|
| -};
|
|
|