| // Copyright 2015 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. |
| |
| import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; |
| |
| import {BrowserProxy} from './browser_proxy.js'; |
| import {PageHandlerInterface} from './downloads.mojom-webui.js'; |
| |
| export class SearchService { |
| private searchTerms_: Array<string> = []; |
| private mojoHandler_: PageHandlerInterface = |
| BrowserProxy.getInstance().handler; |
| |
| /** |
| * @param searchText Input typed by the user into a search box. |
| * @return A list of terms extracted from |searchText|. |
| */ |
| static splitTerms(searchText: string): Array<string> { |
| // Split quoted terms (e.g., 'The "lazy" dog' => ['The', 'lazy', 'dog']). |
| return searchText.split(/"([^"]*)"/).map(s => s.trim()).filter(s => !!s); |
| } |
| |
| /** Instructs the browser to clear all finished downloads. */ |
| clearAll() { |
| if (loadTimeData.getBoolean('allowDeletingHistory')) { |
| this.mojoHandler_.clearAll(); |
| this.search(''); |
| } |
| } |
| |
| /** Loads more downloads with the current search terms. */ |
| loadMore() { |
| this.mojoHandler_.getDownloads(this.searchTerms_); |
| } |
| |
| /** |
| * @return Whether the user is currently searching for downloads |
| * (i.e. has a non-empty search term). |
| */ |
| isSearching(): boolean { |
| return this.searchTerms_.length > 0; |
| } |
| |
| /** |
| * @param searchText What to search for. |
| * @return Whether |searchText| resulted in new search terms. |
| */ |
| search(searchText: string): boolean { |
| const searchTerms = SearchService.splitTerms(searchText); |
| let sameTerms = searchTerms.length === this.searchTerms_.length; |
| |
| for (let i = 0; sameTerms && i < searchTerms.length; ++i) { |
| if (searchTerms[i] !== this.searchTerms_[i]) { |
| sameTerms = false; |
| } |
| } |
| |
| if (sameTerms) { |
| return false; |
| } |
| |
| this.searchTerms_ = searchTerms; |
| this.loadMore(); |
| return true; |
| } |
| |
| static getInstance(): SearchService { |
| return instance || (instance = new SearchService()); |
| } |
| |
| static setInstance(obj: SearchService) { |
| instance = obj; |
| } |
| } |
| |
| let instance: SearchService|null = null; |