| Index: chrome/browser/resources/file_manager/js/file_manager.js
|
| diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
|
| index 0b5ec67fa49f9c16f43140e797643153b7a0d264..8ae8d9d4e2a7536dcab3d66df1b1054e5d896c92 100644
|
| --- a/chrome/browser/resources/file_manager/js/file_manager.js
|
| +++ b/chrome/browser/resources/file_manager/js/file_manager.js
|
| @@ -78,6 +78,50 @@ var DialogType = {
|
| };
|
|
|
| /**
|
| + * TextMeasure constructor.
|
| + *
|
| + * TextMeasure is a measure for text that returns the width of text. This
|
| + * class has a dummy span element. When measuring the width of text, it sets
|
| + * the text to the element and obtains the element's size by
|
| + * getBoundingClientRect.
|
| + *
|
| + * @constructor
|
| + * @param {HTMLElement} element Element that has styles of measured text. The
|
| + * width of text is mesures like as it is rendered in this element.
|
| + */
|
| +var TextMeasure = function(element) {
|
| + var doc = element.ownerDocument;
|
| + this.dummySpan_ = doc.createElement('span');
|
| + this.dummySpan_ = doc.getElementsByTagName('body')[0].
|
| + appendChild(this.dummySpan_);
|
| + this.dummySpan_.style.position = 'absolute';
|
| + this.dummySpan_.style.visibility = 'hidden';
|
| + var styles = window.getComputedStyle(element, '');
|
| + var stylesToBeCopied = [
|
| + 'fontSize',
|
| + 'fontStyle',
|
| + 'fontWeight',
|
| + 'fontFamily',
|
| + 'letterSpacing'
|
| + ];
|
| + for (var i = 0; i < stylesToBeCopied.length; i++) {
|
| + this.dummySpan_.style[stylesToBeCopied[i]] = styles[stylesToBeCopied[i]];
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Measures the widht of text.
|
| + *
|
| + * @param {string} text Text that is measured the width.
|
| + * @return {number} Width of the specified text.
|
| + */
|
| +TextMeasure.prototype.getWidth = function(text) {
|
| + this.dummySpan_.innerText = text;
|
| + var rect = this.dummySpan_.getBoundingClientRect();
|
| + return rect ? rect.width : 0;
|
| +};
|
| +
|
| +/**
|
| * @param {string} type Dialog type.
|
| * @return {boolean} Whether the type is modal.
|
| */
|
| @@ -1005,6 +1049,21 @@ DialogType.isModal = function(type) {
|
| this.searchBox_ = this.dialogDom_.querySelector('#search-box');
|
| this.searchBox_.addEventListener(
|
| 'input', this.onSearchBoxUpdate_.bind(this));
|
| + this.searchTextMeasure_ = new TextMeasure(this.searchBox_);
|
| + if (util.platform.newUI()) {
|
| + this.searchIcon_ = this.dialogDom_.querySelector('#search-icon');
|
| + this.searchIcon_.addEventListener(
|
| + 'click',
|
| + function() { this.searchBox_.focus(); }.bind(this));
|
| + this.searchClearButton_ =
|
| + this.dialogDom_.querySelector('#search-clear-button');
|
| + this.searchClearButton_.addEventListener(
|
| + 'click',
|
| + function() {
|
| + this.searchBox_.value = '';
|
| + this.onSearchBoxUpdate_();
|
| + }.bind(this));
|
| + }
|
| this.lastSearchQuery_ = '';
|
|
|
| var autocompleteList = new cr.ui.AutocompleteList();
|
| @@ -2369,7 +2428,7 @@ DialogType.isModal = function(type) {
|
| FileManager.prototype.updateSearchBoxOnDirChange_ = function() {
|
| if (!this.searchBox_.disabled) {
|
| this.searchBox_.value = '';
|
| - this.updateSearchBoxClass_();
|
| + this.updateSearchBoxStyles_();
|
| }
|
| };
|
|
|
| @@ -3445,7 +3504,7 @@ DialogType.isModal = function(type) {
|
| FileManager.prototype.onSearchBoxUpdate_ = function(event) {
|
| var searchString = this.searchBox_.value;
|
|
|
| - this.updateSearchBoxClass_();
|
| + this.updateSearchBoxStyles_();
|
| if (this.isOnDrive()) {
|
| // When the search text is changed, finishes the search and showes back
|
| // the last directory by passing an empty string to
|
| @@ -3469,8 +3528,15 @@ DialogType.isModal = function(type) {
|
| *
|
| * @private
|
| */
|
| - FileManager.prototype.updateSearchBoxClass_ = function() {
|
| - this.searchBox_.classList.toggle('has-text', !!this.searchBox_.value);
|
| + FileManager.prototype.updateSearchBoxStyles_ = function() {
|
| + if (!util.platform.newUI())
|
| + return;
|
| + var TEXT_BOX_PADDING = 16; // in px.
|
| + this.searchBoxWrapper_.classList.toggle('has-text',
|
| + !!this.searchBox_.value);
|
| + var width = this.searchTextMeasure_.getWidth(this.searchBox_.value) +
|
| + TEXT_BOX_PADDING;
|
| + this.searchBox_.style.width = width + 'px';
|
| };
|
|
|
| /**
|
|
|