Index: chrome/browser/resources/file_manager/js/ui/breadcrumbs_controller.js |
diff --git a/chrome/browser/resources/file_manager/js/ui/breadcrumbs_controller.js b/chrome/browser/resources/file_manager/js/ui/breadcrumbs_controller.js |
deleted file mode 100644 |
index 9aeb077df1453d9d4cccb93473a9ae7356402b0e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/ui/breadcrumbs_controller.js |
+++ /dev/null |
@@ -1,308 +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. |
- * @constructor |
- */ |
-function BreadcrumbsController(div, metadataCache) { |
- this.metadataCache_ = metadataCache; |
- this.bc_ = div; |
- this.hideLast_ = false; |
- this.rootPath_ = null; |
- this.path_ = null; |
- this.rootPathOverride_ = null; |
- div.addEventListener('click', this.onClick_.bind(this)); |
-} |
- |
-/** |
- * Extends cr.EventTarget. |
- */ |
-BreadcrumbsController.prototype.__proto__ = cr.EventTarget.prototype; |
- |
-/** |
- * Whether to hide the last part of the path. |
- * @param {boolean} value True if hide. |
- */ |
-BreadcrumbsController.prototype.setHideLast = function(value) { |
- this.hideLast_ = value; |
-}; |
- |
-/** |
- * Update the breadcrumb display. |
- * TODO(haruki): Remove |rootPath|. It only needs |path|, as |rootPath| can be |
- * derived. |
- * |
- * @param {string} rootPath Path to root. |
- * @param {string} path Path to directory. |
- */ |
-BreadcrumbsController.prototype.update = function(rootPath, path) { |
- if (path == this.path_) |
- return; |
- |
- // Clear the content and store |path|. |
- this.bc_.textContent = ''; |
- this.rootPath_ = rootPath; |
- this.path_ = path; |
- |
- // determineRootPathOverride_() may call MetadataCache to retrieve |
- // shared-with-me property and call the callback asynchronously. |
- this.determineRootPathOverride_( |
- rootPath, path, function(requestedPath, rootPathOverride) { |
- if (requestedPath != path) { |
- // Another update() is called. Ignore this old callback. |
- return; |
- } |
- this.rootPathOverride_ = rootPathOverride; |
- this.updateInternal_(rootPath, path, rootPathOverride); |
- }.bind(this)); |
-}; |
- |
-/** |
- * Check the given path and determines if the breadcrumb should show "Shared |
- * with me" as the first crumb. RootDirectory.DRIVE_SHARED_WITH_ME is used as |
- * the first crumb if |path| is a shared-with-me directory outside "My Drive". |
- * See updateInternal_(). |
- * |
- * @param {string} rootPath Path to root. |
- * @param {string} path Path to directory. |
- * @param {function(string, !string)} callback Function to call with |path| and |
- * the determined root path override. |
- * @private |
- */ |
-BreadcrumbsController.prototype.determineRootPathOverride_ = |
- function(rootPath, path, callback) { |
- if (rootPath != RootDirectory.DRIVE + '/' + DriveSubRootDirectory.OTHER || |
- rootPath == path) { |
- callback(path, null); // No need for Drive properties. |
- return; |
- } |
- |
- var delimiterPos = path.indexOf('/', rootPath.length + 1); |
- var firstDirPath = delimiterPos > 0 ? path.substring(0, delimiterPos) : path; |
- var entryUrl = util.makeFilesystemUrl(firstDirPath); |
- |
- this.metadataCache_.getOne(entryUrl, 'drive', function(result) { |
- callback(path, |
- result && result.sharedWithMe ? |
- RootDirectory.DRIVE_SHARED_WITH_ME : |
- null); |
- }); |
-}; |
- |
-/** |
- * Update the breadcrumb display. |
- * @private |
- */ |
-BreadcrumbsController.prototype.updateInternal_ = function() { |
- var relativePath = |
- this.path_.substring(this.rootPath_.length).replace(/\/$/, ''); |
- var pathNames = relativePath.split('/'); |
- if (pathNames[0] == '') |
- pathNames.splice(0, 1); |
- |
- // We need a first breadcrumb for root, so placing last name from |
- // rootPath as first name of relativePath. |
- var rootPathNames = this.rootPath_.replace(/\/$/, '').split('/'); |
- pathNames.splice(0, 0, rootPathNames[rootPathNames.length - 1]); |
- rootPathNames.splice(rootPathNames.length - 1, 1); |
- var path = rootPathNames.join('/') + '/'; |
- |
- var doc = this.bc_.ownerDocument; |
- |
- var divAdded = false; |
- for (var i = 0; |
- i < (this.hideLast_ ? pathNames.length - 1 : pathNames.length); |
- i++) { |
- if (divAdded) { |
- var spacer = doc.createElement('div'); |
- spacer.className = 'separator'; |
- this.bc_.appendChild(spacer); |
- } |
- var pathName = pathNames[i]; |
- path += pathName; |
- |
- // We have a special case for the root crumb /drive/other, which contains |
- // the Drive entries not in "My Drive". It is hidden as this path is not |
- // meaningful for the user. |
- if (i == 0 && |
- path === RootDirectory.DRIVE + '/' + DriveSubRootDirectory.OTHER && |
- this.rootPathOverride_ == null) { |
- continue; |
- } |
- |
- // Create a crumb. |
- var div = doc.createElement('div'); |
- div.className = 'breadcrumb-path'; |
- div.textContent = i == 0 ? |
- PathUtil.getRootLabel(this.rootPathOverride_ || path) : |
- pathName; |
- |
- path = path + '/'; |
- |
- this.bc_.appendChild(div); |
- divAdded = true; |
- |
- if (i == pathNames.length - 1) |
- div.classList.add('breadcrumb-last'); |
- } |
- 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'; |
-}; |
- |
-/** |
- * Show breadcrumbs. |
- * @param {string} rootPath Path to root. |
- * @param {string} path Path to directory. |
- */ |
-BreadcrumbsController.prototype.show = function(rootPath, path) { |
- this.bc_.hidden = false; |
- this.update(rootPath, path); |
-}; |
- |
-/** |
- * 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) { |
- var path = this.getTargetPath(event); |
- if (!path) |
- return; |
- |
- var newEvent = new Event('pathclick'); |
- newEvent.path = path; |
- this.dispatchEvent(newEvent); |
-}; |
- |
-/** |
- * Returns path associated with the event target. Returns empty string for |
- * inactive elements: separators, empty space and the last chunk. |
- * @param {Event} event The UI event. |
- * @return {string} Full path or empty string. |
- */ |
-BreadcrumbsController.prototype.getTargetPath = function(event) { |
- if (!event.target.classList.contains('breadcrumb-path') || |
- event.target.classList.contains('breadcrumb-last')) { |
- return ''; |
- } |
- |
- var items = this.bc_.querySelectorAll('.breadcrumb-path'); |
- var path = this.rootPath_; |
- |
- if (event.target == items[0]) { |
- // The first crumb can be overridden. |
- return this.rootPathOverride_ || path; |
- } else { |
- for (var i = 1; items[i - 1] != event.target; i++) { |
- path += '/' + items[i].textContent; |
- } |
- } |
- return path; |
-}; |
- |
-/** |
- * Returns the breadcrumbs container. |
- * @return {HTMLElement} Breadcumbs container HTML element. |
- */ |
-BreadcrumbsController.prototype.getContainer = function() { |
- return this.bc_; |
-}; |