| Index: chrome/browser/resources/file_manager/foreground/js/ui/breadcrumbs_controller.js
|
| diff --git a/chrome/browser/resources/file_manager/foreground/js/ui/breadcrumbs_controller.js b/chrome/browser/resources/file_manager/foreground/js/ui/breadcrumbs_controller.js
|
| deleted file mode 100644
|
| index fc3dacf01a5b0935698247af9c72a86c11ace487..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/resources/file_manager/foreground/js/ui/breadcrumbs_controller.js
|
| +++ /dev/null
|
| @@ -1,263 +0,0 @@
|
| -// Copyright 2013 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';
|
| -
|
| -/**
|
| - * @extends cr.EventTarget
|
| - * @param {HTMLDivElement} div Div container for breadcrumbs.
|
| - * @param {MetadataCache} metadataCache To retrieve metadata.
|
| - * @param {VolumeManagerWrapper} volumeManager Volume manager.
|
| - * @constructor
|
| - */
|
| -function BreadcrumbsController(div, metadataCache, volumeManager) {
|
| - this.bc_ = div;
|
| - this.metadataCache_ = metadataCache;
|
| - this.volumeManager_ = volumeManager;
|
| - this.entry_ = null;
|
| -
|
| - /**
|
| - * Sequence value to skip requests that are out of date.
|
| - * @type {number}
|
| - * @private
|
| - */
|
| - this.showSequence_ = 0;
|
| -
|
| - // Register events and seql the object.
|
| - div.addEventListener('click', this.onClick_.bind(this));
|
| -}
|
| -
|
| -/**
|
| - * Extends cr.EventTarget.
|
| - */
|
| -BreadcrumbsController.prototype.__proto__ = cr.EventTarget.prototype;
|
| -
|
| -/**
|
| - * Shows breadcrumbs.
|
| - *
|
| - * @param {Entry} entry Target entry.
|
| - */
|
| -BreadcrumbsController.prototype.show = function(entry) {
|
| - if (entry === this.entry_)
|
| - return;
|
| -
|
| - this.entry_ = entry;
|
| - this.bc_.hidden = false;
|
| - this.bc_.textContent = '';
|
| - this.showSequence_++;
|
| -
|
| - var queue = new AsyncUtil.Queue();
|
| - var entries = [];
|
| - var error = false;
|
| -
|
| - // Obtain entries from the target entry to the root.
|
| - var resolveParent = function(currentEntry, previousEntry, callback) {
|
| - var entryLocationInfo = this.volumeManager_.getLocationInfo(currentEntry);
|
| - if (!entryLocationInfo) {
|
| - error = true;
|
| - callback();
|
| - return;
|
| - }
|
| -
|
| - if (entryLocationInfo.isRootEntry &&
|
| - entryLocationInfo.rootType === RootType.DRIVE_OTHER) {
|
| - this.metadataCache_.getOne(previousEntry, 'drive', function(result) {
|
| - if (result && result.sharedWithMe) {
|
| - // Adds the shared-with-me entry instead.
|
| - var driveVolumeInfo = entryLocationInfo.volumeInfo;
|
| - var sharedWithMeEntry =
|
| - driveVolumeInfo.fakeEntries[RootType.DRIVE_SHARED_WITH_ME];
|
| - if (sharedWithMeEntry)
|
| - entries.unshift(sharedWithMeEntry);
|
| - else
|
| - error = true;
|
| - } else {
|
| - entries.unshift(currentEntry);
|
| - }
|
| - // Finishes traversal since the current is root.
|
| - callback();
|
| - });
|
| - return;
|
| - }
|
| -
|
| - entries.unshift(currentEntry);
|
| - if (!entryLocationInfo.isRootEntry) {
|
| - currentEntry.getParent(function(parentEntry) {
|
| - resolveParent(parentEntry, currentEntry, callback);
|
| - }.bind(this), function() {
|
| - error = true;
|
| - callback();
|
| - });
|
| - } else {
|
| - callback();
|
| - }
|
| - }.bind(this);
|
| -
|
| - queue.run(resolveParent.bind(this, entry, null));
|
| -
|
| - queue.run(function(callback) {
|
| - // If an error was occured, just skip.
|
| - if (error) {
|
| - callback();
|
| - return;
|
| - }
|
| -
|
| - // If the path is not under the drive other root, it is not needed to
|
| - // override root type.
|
| - var locationInfo = this.volumeManager_.getLocationInfo(entry);
|
| - if (!locationInfo)
|
| - error = true;
|
| -
|
| - callback();
|
| - }.bind(this));
|
| -
|
| - // Update DOM element.
|
| - queue.run(function(sequence, callback) {
|
| - // Check the sequence number to skip requests that are out of date.
|
| - if (this.showSequence_ === sequence && !error)
|
| - this.updateInternal_(entries);
|
| - callback();
|
| - }.bind(this, this.showSequence_));
|
| -};
|
| -
|
| -/**
|
| - * Updates the breadcrumb display.
|
| - * @param {Array.<Entry>} entries Entries on the target path.
|
| - * @private
|
| - */
|
| -BreadcrumbsController.prototype.updateInternal_ = function(entries) {
|
| - // Make elements.
|
| - var doc = this.bc_.ownerDocument;
|
| - for (var i = 0; i < entries.length; i++) {
|
| - // Add a component.
|
| - var entry = entries[i];
|
| - var div = doc.createElement('div');
|
| - div.className = 'breadcrumb-path';
|
| - div.textContent = util.getEntryLabel(this.volumeManager_, entry);
|
| - div.entry = entry;
|
| - this.bc_.appendChild(div);
|
| -
|
| - // If this is the last component, break here.
|
| - if (i === entries.length - 1) {
|
| - div.classList.add('breadcrumb-last');
|
| - break;
|
| - }
|
| -
|
| - // Add a separator.
|
| - var separator = doc.createElement('div');
|
| - separator.className = 'separator';
|
| - this.bc_.appendChild(separator);
|
| - }
|
| -
|
| - this.truncate();
|
| -};
|
| -
|
| -/**
|
| - * Updates breadcrumbs widths in order to truncate it properly.
|
| - */
|
| -BreadcrumbsController.prototype.truncate = function() {
|
| - if (!this.bc_.firstChild)
|
| - return;
|
| -
|
| - // Assume style.width == clientWidth (items have no margins or paddings).
|
| -
|
| - for (var item = this.bc_.firstChild; item; item = item.nextSibling) {
|
| - item.removeAttribute('style');
|
| - item.removeAttribute('collapsed');
|
| - }
|
| -
|
| - var containerWidth = this.bc_.clientWidth;
|
| -
|
| - var pathWidth = 0;
|
| - var currentWidth = 0;
|
| - var lastSeparator;
|
| - for (var item = this.bc_.firstChild; item; item = item.nextSibling) {
|
| - if (item.className == 'separator') {
|
| - pathWidth += currentWidth;
|
| - currentWidth = item.clientWidth;
|
| - lastSeparator = item;
|
| - } else {
|
| - currentWidth += item.clientWidth;
|
| - }
|
| - }
|
| - if (pathWidth + currentWidth <= containerWidth)
|
| - return;
|
| - if (!lastSeparator) {
|
| - this.bc_.lastChild.style.width = Math.min(currentWidth, containerWidth) +
|
| - 'px';
|
| - return;
|
| - }
|
| - var lastCrumbSeparatorWidth = lastSeparator.clientWidth;
|
| - // Current directory name may occupy up to 70% of space or even more if the
|
| - // path is short.
|
| - var maxPathWidth = Math.max(Math.round(containerWidth * 0.3),
|
| - containerWidth - currentWidth);
|
| - maxPathWidth = Math.min(pathWidth, maxPathWidth);
|
| -
|
| - var parentCrumb = lastSeparator.previousSibling;
|
| - var collapsedWidth = 0;
|
| - if (parentCrumb && pathWidth - maxPathWidth > parentCrumb.clientWidth) {
|
| - // At least one crumb is hidden completely (or almost completely).
|
| - // Show sign of hidden crumbs like this:
|
| - // root > some di... > ... > current directory.
|
| - parentCrumb.setAttribute('collapsed', '');
|
| - collapsedWidth = Math.min(maxPathWidth, parentCrumb.clientWidth);
|
| - maxPathWidth -= collapsedWidth;
|
| - if (parentCrumb.clientWidth != collapsedWidth)
|
| - parentCrumb.style.width = collapsedWidth + 'px';
|
| -
|
| - lastSeparator = parentCrumb.previousSibling;
|
| - if (!lastSeparator)
|
| - return;
|
| - collapsedWidth += lastSeparator.clientWidth;
|
| - maxPathWidth = Math.max(0, maxPathWidth - lastSeparator.clientWidth);
|
| - }
|
| -
|
| - pathWidth = 0;
|
| - for (var item = this.bc_.firstChild; item != lastSeparator;
|
| - item = item.nextSibling) {
|
| - // TODO(serya): Mixing access item.clientWidth and modifying style and
|
| - // attributes could cause multiple layout reflows.
|
| - if (pathWidth + item.clientWidth <= maxPathWidth) {
|
| - pathWidth += item.clientWidth;
|
| - } else if (pathWidth == maxPathWidth) {
|
| - item.style.width = '0';
|
| - } else if (item.classList.contains('separator')) {
|
| - // Do not truncate separator. Instead let the last crumb be longer.
|
| - item.style.width = '0';
|
| - maxPathWidth = pathWidth;
|
| - } else {
|
| - // Truncate the last visible crumb.
|
| - item.style.width = (maxPathWidth - pathWidth) + 'px';
|
| - pathWidth = maxPathWidth;
|
| - }
|
| - }
|
| -
|
| - currentWidth = Math.min(currentWidth,
|
| - containerWidth - pathWidth - collapsedWidth);
|
| - this.bc_.lastChild.style.width =
|
| - (currentWidth - lastCrumbSeparatorWidth) + 'px';
|
| -};
|
| -
|
| -/**
|
| - * Hide breadcrumbs div.
|
| - */
|
| -BreadcrumbsController.prototype.hide = function() {
|
| - this.bc_.hidden = true;
|
| -};
|
| -
|
| -/**
|
| - * Handle a click event on a breadcrumb element.
|
| - * @param {Event} event The click event.
|
| - * @private
|
| - */
|
| -BreadcrumbsController.prototype.onClick_ = function(event) {
|
| - if (!event.target.classList.contains('breadcrumb-path') ||
|
| - event.target.classList.contains('breadcrumb-last'))
|
| - return;
|
| -
|
| - var newEvent = new Event('pathclick');
|
| - newEvent.entry = event.target.entry;
|
| - this.dispatchEvent(newEvent);
|
| -};
|
|
|