15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('print_preview', function() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'use strict'; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Component that renders a search box for searching through destinations. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {print_preview.Component} 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function SearchBox() { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.call(this); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Timeout used to control incremental search. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {?number} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.timeout_ = null; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Input box where the query is entered. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {HTMLInputElement} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input_ = null; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Enumeration of event types dispatched from the search box. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {string} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox.EventType = { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEARCH: 'print_preview.SearchBox.SEARCH' 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * CSS classes used by the search box. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {string} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox.Classes_ = { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INPUT: 'search-box-input' 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Delay in milliseconds before dispatching a SEARCH event. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox.SEARCH_DELAY_ = 150; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox.prototype = { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: print_preview.Component.prototype, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @param {string} New query to set the search box's query to. */ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setQuery: function(query) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query = query || ''; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input_.value = query.trim(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** Sets the input element of the search box in focus. */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus: function() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input_.focus(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enterDocument: function() { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.prototype.enterDocument.call(this); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tracker.add(this.input_, 'keydown', this.onInputKeyDown_.bind(this)); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exitDocument: function() { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_preview.Component.prototype.exitDocument.call(this); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input_ = null; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @override */ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorateInternal: function() { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input_ = this.getElement().getElementsByClassName( 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox.Classes_.INPUT)[0]; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string} The current query of the search box. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getQuery_: function() { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.input_.value.trim(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Dispatches a SEARCH event. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dispatchSearchEvent_: function() { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.timeout_ = null; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var searchEvent = new cr.Event(SearchBox.EventType.SEARCH); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) searchEvent.query = this.getQuery_(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dispatchEvent(searchEvent); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the input element's value changes. Dispatches a search event. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onInputKeyDown_: function() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.timeout_) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearTimeout(this.timeout_); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.timeout_ = setTimeout( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dispatchSearchEvent_.bind(this), SearchBox.SEARCH_DELAY_); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Export 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBox: SearchBox 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 125