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

Unified Diff: ui/file_manager/file_manager/foreground/js/search_controller.js

Issue 645853013: Remove some platform specific stuff from views. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
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));
-};

Powered by Google App Engine
This is Rietveld 408576698