Index: chrome/browser/resources/file_manager/foreground/js/ui/progress_center_panel.js |
diff --git a/chrome/browser/resources/file_manager/foreground/js/ui/progress_center_panel.js b/chrome/browser/resources/file_manager/foreground/js/ui/progress_center_panel.js |
deleted file mode 100644 |
index 3ea5cb73bb5fa249908a3d515f1431db9713c26e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/foreground/js/ui/progress_center_panel.js |
+++ /dev/null |
@@ -1,490 +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'; |
- |
-/** |
- * Item element of the progress center. |
- * @param {HTMLDocument} document Document which the new item belongs to. |
- * @constructor |
- */ |
-function ProgressCenterItemElement(document) { |
- var label = document.createElement('label'); |
- label.className = 'label'; |
- |
- var progressBarIndicator = document.createElement('div'); |
- progressBarIndicator.className = 'progress-track'; |
- |
- var progressBar = document.createElement('div'); |
- progressBar.className = 'progress-bar'; |
- progressBar.appendChild(progressBarIndicator); |
- |
- var progressFrame = document.createElement('div'); |
- progressFrame.className = 'progress-frame'; |
- progressFrame.appendChild(label); |
- progressFrame.appendChild(progressBar); |
- |
- var cancelButton = document.createElement('button'); |
- cancelButton.className = 'cancel'; |
- cancelButton.setAttribute('tabindex', '-1'); |
- |
- var buttonFrame = document.createElement('div'); |
- buttonFrame.className = 'button-frame'; |
- buttonFrame.appendChild(cancelButton); |
- |
- var itemElement = document.createElement('li'); |
- itemElement.appendChild(progressFrame); |
- itemElement.appendChild(buttonFrame); |
- |
- return ProgressCenterItemElement.decorate(itemElement); |
-} |
- |
-/** |
- * Ensures the animation triggers. |
- * |
- * @param {function()} callback Function to set the transition end properties. |
- * @return {function()} Function to cancel the request. |
- * @private |
- */ |
-ProgressCenterItemElement.safelySetAnimation_ = function(callback) { |
- var requestId = requestAnimationFrame(function() { |
- // The transitoin start properties currently set are rendered at this frame. |
- // And the transition end properties set by the callback is rendered at the |
- // next frame. |
- requestId = requestAnimationFrame(callback); |
- }); |
- return function() { |
- cancelAnimationFrame(requestId); |
- }; |
-}; |
- |
-/** |
- * Event triggered when the item should be dismissed. |
- * @type {string} |
- * @const |
- */ |
-ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT = 'progressAnimationEnd'; |
- |
-/** |
- * Decoreates the given element as a progress item. |
- * @param {HTMLElement} element Item to be decoreated. |
- * @return {ProgressCenterItemElement} Decoreated item. |
- */ |
-ProgressCenterItemElement.decorate = function(element) { |
- element.__proto__ = ProgressCenterItemElement.prototype; |
- element.state_ = ProgressItemState.PROGRESSING; |
- element.track_ = element.querySelector('.progress-track'); |
- element.track_.addEventListener('webkitTransitionEnd', |
- element.onTransitionEnd_.bind(element)); |
- element.cancelTransition_ = null; |
- return element; |
-}; |
- |
-ProgressCenterItemElement.prototype = { |
- __proto__: HTMLDivElement.prototype, |
- get quiet() { |
- return this.classList.contains('quiet'); |
- } |
-}; |
- |
-/** |
- * Updates the element view according to the item. |
- * @param {ProgressCenterItem} item Item to be referred for the update. |
- * @param {boolean} animated Whether the progress width is applied as animated |
- * or not. |
- */ |
-ProgressCenterItemElement.prototype.update = function(item, animated) { |
- // Set element attributes. |
- this.state_ = item.state; |
- this.setAttribute('data-progress-id', item.id); |
- this.classList.toggle('error', item.state === ProgressItemState.ERROR); |
- this.classList.toggle('cancelable', item.cancelable); |
- this.classList.toggle('single', item.single); |
- this.classList.toggle('quiet', item.quiet); |
- |
- // Set label. |
- if (this.state_ === ProgressItemState.PROGRESSING || |
- this.state_ === ProgressItemState.ERROR) { |
- this.querySelector('label').textContent = item.message; |
- } else if (this.state_ === ProgressItemState.CANCELED) { |
- this.querySelector('label').textContent = ''; |
- } |
- |
- // Cancel the previous property set. |
- if (this.cancelTransition_) { |
- this.cancelTransition_(); |
- this.cancelTransition_ = null; |
- } |
- |
- // Set track width. |
- var setWidth = function(nextWidthFrame) { |
- var currentWidthRate = parseInt(this.track_.style.width); |
- // Prevent assigning the same width to avoid stopping the animation. |
- // animated == false may be intended to cancel the animation, so in that |
- // case, the assignment should be done. |
- if (currentWidthRate === nextWidthFrame && animated) |
- return; |
- this.track_.hidden = false; |
- this.track_.style.width = nextWidthFrame + '%'; |
- this.track_.classList.toggle('animated', animated); |
- }.bind(this, item.progressRateInPercent); |
- |
- if (animated) { |
- this.cancelTransition_ = |
- ProgressCenterItemElement.safelySetAnimation_(setWidth); |
- } else { |
- // For animated === false, we should call setWidth immediately to cancel the |
- // animation, otherwise the animation may complete before canceling it. |
- setWidth(); |
- } |
-}; |
- |
-/** |
- * Resets the item. |
- */ |
-ProgressCenterItemElement.prototype.reset = function() { |
- this.track_.hidden = true; |
- this.track_.width = ''; |
- this.state_ = ProgressItemState.PROGRESSING; |
-}; |
- |
-/** |
- * Handles transition end events. |
- * @param {Event} event Transition end event. |
- * @private |
- */ |
-ProgressCenterItemElement.prototype.onTransitionEnd_ = function(event) { |
- if (event.propertyName !== 'width') |
- return; |
- this.track_.classList.remove('animated'); |
- this.dispatchEvent(new Event( |
- ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT, |
- {bubbles: true})); |
-}; |
- |
-/** |
- * Progress center panel. |
- * |
- * @param {HTMLElement} element DOM Element of the process center panel. |
- * @constructor |
- */ |
-function ProgressCenterPanel(element) { |
- /** |
- * Root element of the progress center. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.element_ = element; |
- |
- /** |
- * Open view containing multiple progress items. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.openView_ = this.element_.querySelector('#progress-center-open-view'); |
- |
- /** |
- * Close view that is a summarized progress item. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.closeView_ = ProgressCenterItemElement.decorate( |
- this.element_.querySelector('#progress-center-close-view')); |
- |
- /** |
- * Toggle animation rule of the progress center. |
- * @type {CSSKeyFrameRule} |
- * @private |
- */ |
- this.toggleAnimation_ = ProgressCenterPanel.getToggleAnimation_( |
- element.ownerDocument); |
- |
- /** |
- * Item group for normal priority items. |
- * @type {ProgressCenterItemGroup} |
- * @private |
- */ |
- this.normalItemGroup_ = new ProgressCenterItemGroup('normal', false); |
- |
- /** |
- * Item group for low priority items. |
- * @type {ProgressCenterItemGroup} |
- * @private |
- */ |
- this.quietItemGroup_ = new ProgressCenterItemGroup('quiet', true); |
- |
- /** |
- * Queries to obtains items for each group. |
- * @type {Object.<string, string>} |
- * @private |
- */ |
- this.itemQuery_ = Object.seal({ |
- normal: 'li:not(.quiet)', |
- quiet: 'li.quiet' |
- }); |
- |
- /** |
- * Timeout IDs of the inactive state of each group. |
- * @type {Object.<string, number?>} |
- * @private |
- */ |
- this.timeoutId_ = Object.seal({ |
- normal: null, |
- quiet: null |
- }); |
- |
- /** |
- * Callback to becalled with the ID of the progress item when the cancel |
- * button is clicked. |
- */ |
- this.cancelCallback = null; |
- |
- Object.seal(this); |
- |
- // Register event handlers. |
- element.addEventListener('click', this.onClick_.bind(this)); |
- element.addEventListener( |
- 'webkitAnimationEnd', this.onToggleAnimationEnd_.bind(this)); |
- element.addEventListener( |
- ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT, |
- this.onItemAnimationEnd_.bind(this)); |
-} |
- |
-/** |
- * Obtains the toggle animation keyframes rule from the document. |
- * @param {HTMLDocument} document Document containing the rule. |
- * @return {CSSKeyFrameRules} Animation rule. |
- * @private |
- */ |
-ProgressCenterPanel.getToggleAnimation_ = function(document) { |
- for (var i = 0; i < document.styleSheets.length; i++) { |
- var styleSheet = document.styleSheets[i]; |
- for (var j = 0; j < styleSheet.cssRules.length; j++) { |
- var rule = styleSheet.cssRules[j]; |
- if (rule.type === CSSRule.WEBKIT_KEYFRAMES_RULE && |
- rule.name === 'progress-center-toggle') { |
- return rule; |
- } |
- } |
- } |
- throw new Error('The progress-center-toggle rules is not found.'); |
-}; |
- |
-/** |
- * The default amount of milliseconds time, before a progress item will reset |
- * after the last complete. |
- * @type {number} |
- * @private |
- * @const |
- */ |
-ProgressCenterPanel.RESET_DELAY_TIME_MS_ = 5000; |
- |
-/** |
- * Updates an item to the progress center panel. |
- * @param {!ProgressCenterItem} item Item including new contents. |
- */ |
-ProgressCenterPanel.prototype.updateItem = function(item) { |
- var targetGroup = this.getGroupForItem_(item); |
- |
- // Update the item. |
- var oldState = targetGroup.state; |
- targetGroup.update(item); |
- this.handleGroupStateChange_(targetGroup, oldState, targetGroup.state); |
- |
- // Update an open view item. |
- var newItem = targetGroup.getItem(item.id); |
- var itemElement = this.getItemElement_(item.id); |
- if (newItem) { |
- if (!itemElement) { |
- itemElement = new ProgressCenterItemElement(this.element_.ownerDocument); |
- this.openView_.insertBefore(itemElement, this.openView_.firstNode); |
- } |
- itemElement.update(newItem, targetGroup.isAnimated(item.id)); |
- } else { |
- if (itemElement) |
- itemElement.parentNode.removeChild(itemElement); |
- } |
- |
- // Update the close view. |
- this.updateCloseView_(); |
-}; |
- |
-/** |
- * Handles the item animation end. |
- * @param {Event} event Item animation end event. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.onItemAnimationEnd_ = function(event) { |
- var targetGroup = event.target.classList.contains('quiet') ? |
- this.quietItemGroup_ : this.normalItemGroup_; |
- var oldState = targetGroup.state; |
- if (event.target === this.closeView_) { |
- targetGroup.completeSummarizedItemAnimation(); |
- } else { |
- var itemId = event.target.getAttribute('data-progress-id'); |
- targetGroup.completeItemAnimation(itemId); |
- var newItem = targetGroup.getItem(itemId); |
- var itemElement = this.getItemElement_(itemId); |
- if (!newItem && itemElement) |
- itemElement.parentNode.removeChild(itemElement); |
- } |
- this.handleGroupStateChange_(targetGroup, oldState, targetGroup.state); |
- this.updateCloseView_(); |
-}; |
- |
-/** |
- * Handles the state change of group. |
- * @param {ProgressCenterItemGroup} group Item group. |
- * @param {ProgressCenterItemGroup.State} oldState Old state of the group. |
- * @param {ProgressCenterItemGroup.State} newState New state of the group. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.handleGroupStateChange_ = |
- function(group, oldState, newState) { |
- if (oldState === ProgressCenterItemGroup.State.INACTIVE) { |
- clearTimeout(this.timeoutId_[group.name]); |
- this.timeoutId_[group.name] = null; |
- var elements = |
- this.openView_.querySelectorAll(this.itemQuery_[group.name]); |
- for (var i = 0; i < elements.length; i++) { |
- elements[i].parentNode.removeChild(elements[i]); |
- } |
- } |
- if (newState === ProgressCenterItemGroup.State.INACTIVE) { |
- this.timeoutId_[group.name] = setTimeout(function() { |
- var inOldState = group.state; |
- group.endInactive(); |
- this.handleGroupStateChange_(group, inOldState, group.state); |
- this.updateCloseView_(); |
- }.bind(this), ProgressCenterPanel.RESET_DELAY_TIME_MS_); |
- } |
-}; |
- |
-/** |
- * Updates the close view. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.updateCloseView_ = function() { |
- // Try to use the normal summarized item. |
- var normalSummarizedItem = |
- this.normalItemGroup_.getSummarizedItem(this.quietItemGroup_.numErrors); |
- if (normalSummarizedItem) { |
- // If the quiet animation is overrided by normal summarized item, discard |
- // the quiet animation. |
- if (this.quietItemGroup_.isSummarizedAnimated()) { |
- var oldState = this.quietItemGroup_.state; |
- this.quietItemGroup_.completeSummarizedItemAnimation(); |
- this.handleGroupStateChange_(this.quietItemGroup_, |
- oldState, |
- this.quietItemGroup_.state); |
- } |
- |
- // Update the view state. |
- this.closeView_.update(normalSummarizedItem, |
- this.normalItemGroup_.isSummarizedAnimated()); |
- this.element_.hidden = false; |
- return; |
- } |
- |
- // Try to use the quiet summarized item. |
- var quietSummarizedItem = |
- this.quietItemGroup_.getSummarizedItem(this.normalItemGroup_.numErrors); |
- if (quietSummarizedItem) { |
- this.closeView_.update(quietSummarizedItem, |
- this.quietItemGroup_.isSummarizedAnimated()); |
- this.element_.hidden = false; |
- return; |
- } |
- |
- // Try to use the error summarized item. |
- var errorSummarizedItem = ProgressCenterItemGroup.getSummarizedErrorItem( |
- this.normalItemGroup_, this.quietItemGroup_); |
- if (errorSummarizedItem) { |
- this.closeView_.update(errorSummarizedItem, false); |
- this.element_.hidden = false; |
- return; |
- } |
- |
- // Hide the progress center because there is no items to show. |
- this.closeView_.reset(); |
- this.element_.hidden = true; |
- this.element_.classList.remove('opened'); |
-}; |
- |
-/** |
- * Gets an item element having the specified ID. |
- * @param {string} id progress item ID. |
- * @return {HTMLElement} Item element having the ID. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.getItemElement_ = function(id) { |
- var query = 'li[data-progress-id="' + id + '"]'; |
- return this.openView_.querySelector(query); |
-}; |
- |
-/** |
- * Obtains the group for the item. |
- * @param {ProgressCenterItem} item Progress item. |
- * @return {ProgressCenterItemGroup} Item group that should contain the item. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.getGroupForItem_ = function(item) { |
- return item.quiet ? this.quietItemGroup_ : this.normalItemGroup_; |
-}; |
- |
-/** |
- * Handles the animation end event of the progress center. |
- * @param {Event} event Animation end event. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.onToggleAnimationEnd_ = function(event) { |
- // Transition end of the root element's height. |
- if (event.target === this.element_ && |
- event.animationName === 'progress-center-toggle') { |
- this.element_.classList.remove('animated'); |
- return; |
- } |
-}; |
- |
-/** |
- * Handles the click event. |
- * @param {Event} event Click event. |
- * @private |
- */ |
-ProgressCenterPanel.prototype.onClick_ = function(event) { |
- // Toggle button. |
- if (event.target.classList.contains('open') || |
- event.target.classList.contains('close')) { |
- // If the progress center has already animated, just return. |
- if (this.element_.classList.contains('animated')) |
- return; |
- |
- // Obtains current and target height. |
- var currentHeight; |
- var targetHeight; |
- if (this.element_.classList.contains('opened')) { |
- currentHeight = this.openView_.getBoundingClientRect().height; |
- targetHeight = this.closeView_.getBoundingClientRect().height; |
- } else { |
- currentHeight = this.closeView_.getBoundingClientRect().height; |
- targetHeight = this.openView_.getBoundingClientRect().height; |
- } |
- |
- // Set styles for animation. |
- this.toggleAnimation_.cssRules[0].style.height = currentHeight + 'px'; |
- this.toggleAnimation_.cssRules[1].style.height = targetHeight + 'px'; |
- this.element_.classList.add('animated'); |
- this.element_.classList.toggle('opened'); |
- return; |
- } |
- |
- // Cancel button. |
- if (event.target.classList.contains('cancel')) { |
- var itemElement = event.target.parentNode.parentNode; |
- if (this.cancelCallback) { |
- var id = itemElement.getAttribute('data-progress-id'); |
- this.cancelCallback(id); |
- } |
- } |
-}; |