Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2735)

Unified Diff: chrome/browser/resources/file_manager/js/ui/breadcrumbs_controller.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_;
-};
« no previous file with comments | « chrome/browser/resources/file_manager/js/tree.css.js ('k') | chrome/browser/resources/file_manager/js/ui/conflict_dialog.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698