Index: chrome/browser/resources/file_manager/js/drag_selector.js |
diff --git a/chrome/browser/resources/file_manager/js/drag_selector.js b/chrome/browser/resources/file_manager/js/drag_selector.js |
deleted file mode 100644 |
index edc55165dfb3b0e216d8ffcf286332cc4c76b3e1..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/drag_selector.js |
+++ /dev/null |
@@ -1,244 +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'; |
- |
-/** |
- * Drag selector used on the file list or the grid table. |
- * TODO(hirono): Support drag selection for grid view. crbug.com/224832 |
- * @constructor |
- */ |
-function DragSelector() { |
- /** |
- * Target list of drag selection. |
- * @type {cr.ui.List} |
- * @private |
- */ |
- this.target_ = null; |
- |
- /** |
- * Border element of drag handle. |
- * @type {HtmlElement} |
- * @private |
- */ |
- this.border_ = null; |
- |
- /** |
- * Start point of dragging. |
- * @type {number?} |
- * @private |
- */ |
- this.startX_ = null; |
- |
- /** |
- * Start point of dragging. |
- * @type {number?} |
- * @private |
- */ |
- this.startY_ = null; |
- |
- /** |
- * Indexes of selected items by dragging at the last update. |
- * @type {Array.<number>!} |
- * @private |
- */ |
- this.lastSelection_ = []; |
- |
- /** |
- * Indexes of selected items at the start of dragging. |
- * @type {Array.<number>!} |
- * @private |
- */ |
- this.originalSelection_ = []; |
- |
- // Bind handlers to make them removable. |
- this.onMouseMoveBound_ = this.onMouseMove_.bind(this); |
- this.onMouseUpBound_ = this.onMouseUp_.bind(this); |
- |
- Object.seal(this); |
-} |
- |
-/** |
- * Flag that shows whether the item is included in the selection or not. |
- * @enum {number} |
- * @private |
- */ |
-DragSelector.SelectionFlag_ = { |
- IN_LAST_SELECTION: 1 << 0, |
- IN_CURRENT_SELECTION: 1 << 1 |
-}; |
- |
-/** |
- * Obtains the scrolled position in the element of mouse pointer from the mouse |
- * event. |
- * |
- * @param {HTMLElement} element Element that has the scroll bars. |
- * @param {Event} event The mouse event. |
- * @return {object} Scrolled position. |
- */ |
-DragSelector.getScrolledPosition = function(element, event) { |
- if (!element.cachedBounds) { |
- element.cachedBounds = element.getBoundingClientRect(); |
- if (!element.cachedBounds) |
- return null; |
- } |
- var rect = element.cachedBounds; |
- return { |
- x: event.clientX - rect.left + element.scrollLeft, |
- y: event.clientY - rect.top + element.scrollTop |
- }; |
-}; |
- |
-/** |
- * Starts drag selection by reacting dragstart event. |
- * This function must be called from handlers of dragstart event. |
- * |
- * @this {DragSelector} |
- * @param {cr.ui.List} list List where the drag selection starts. |
- * @param {Event} event The dragstart event. |
- */ |
-DragSelector.prototype.startDragSelection = function(list, event) { |
- // Precondition check |
- if (!list.selectionModel_.multiple || this.target_) |
- return; |
- |
- // Set the target of the drag selection |
- this.target_ = list; |
- |
- // Prevent the default action. |
- event.preventDefault(); |
- |
- // Save the start state. |
- var startPos = DragSelector.getScrolledPosition(list, event); |
- if (!startPos) |
- return; |
- this.startX_ = startPos.x; |
- this.startY_ = startPos.y; |
- this.lastSelection_ = []; |
- this.originalSelection_ = this.target_.selectionModel_.selectedIndexes; |
- |
- // Create and add the border element |
- if (!this.border_) { |
- this.border_ = this.target_.ownerDocument.createElement('div'); |
- this.border_.className = 'drag-selection-border'; |
- } |
- this.border_.style.left = this.startX_ + 'px'; |
- this.border_.style.top = this.startY_ + 'px'; |
- this.border_.style.width = '0'; |
- this.border_.style.height = '0'; |
- list.appendChild(this.border_); |
- |
- // If no modifier key is pressed, clear the original selection. |
- if (!event.shiftKey && !event.ctrlKey) |
- this.target_.selectionModel_.unselectAll(); |
- |
- // Register event handlers. |
- // The handlers are bounded at the constructor. |
- this.target_.ownerDocument.addEventListener( |
- 'mousemove', this.onMouseMoveBound_, true); |
- this.target_.ownerDocument.addEventListener( |
- 'mouseup', this.onMouseUpBound_, true); |
-}; |
- |
-/** |
- * Handles the mousemove event. |
- * @private |
- * @param {MouseEvent} event The mousemove event. |
- */ |
-DragSelector.prototype.onMouseMove_ = function(event) { |
- // Get the selection bounds. |
- var pos = DragSelector.getScrolledPosition(this.target_, event); |
- var borderBounds = { |
- left: Math.max(Math.min(this.startX_, pos.x), 0), |
- top: Math.max(Math.min(this.startY_, pos.y), 0), |
- right: Math.min(Math.max(this.startX_, pos.x), this.target_.scrollWidth), |
- bottom: Math.min(Math.max(this.startY_, pos.y), this.target_.scrollHeight) |
- }; |
- borderBounds.width = borderBounds.right - borderBounds.left; |
- borderBounds.height = borderBounds.bottom - borderBounds.top; |
- |
- // Collect items within the selection rect. |
- var currentSelection = this.target_.getHitElements( |
- borderBounds.left, |
- borderBounds.top, |
- borderBounds.width, |
- borderBounds.height); |
- var pointedElements = this.target_.getHitElements(pos.x, pos.y); |
- var leadIndex = pointedElements.length ? pointedElements[0] : -1; |
- |
- // Diff the selection between currentSelection and this.lastSelection_. |
- var selectionFlag = []; |
- for (var i = 0; i < this.lastSelection_.length; i++) { |
- var index = this.lastSelection_[i]; |
- // Bit operator can be used for undefined value. |
- selectionFlag[index] = |
- selectionFlag[index] | DragSelector.SelectionFlag_.IN_LAST_SELECTION; |
- } |
- for (var i = 0; i < currentSelection.length; i++) { |
- var index = currentSelection[i]; |
- // Bit operator can be used for undefined value. |
- selectionFlag[index] = |
- selectionFlag[index] | DragSelector.SelectionFlag_.IN_CURRENT_SELECTION; |
- } |
- |
- // Update the selection |
- this.target_.selectionModel_.beginChange(); |
- for (var name in selectionFlag) { |
- var index = parseInt(name); |
- var flag = selectionFlag[name]; |
- // The flag may be one of followings: |
- // - IN_LAST_SELECTION | IN_CURRENT_SELECTION |
- // - IN_LAST_SELECTION |
- // - IN_CURRENT_SELECTION |
- // - undefined |
- |
- // If the flag equals to (IN_LAST_SELECTION | IN_CURRENT_SELECTION), |
- // this is included in both the last selection and the current selection. |
- // We have nothing to do for this item. |
- |
- if (flag == DragSelector.SelectionFlag_.IN_LAST_SELECTION) { |
- // If the flag equals to IN_LAST_SELECTION, |
- // then the item is included in lastSelection but not in currentSelection. |
- // Revert the selection state to this.originalSelection_. |
- this.target_.selectionModel_.setIndexSelected( |
- index, this.originalSelection_.indexOf(index) != -1); |
- } else if (flag == DragSelector.SelectionFlag_.IN_CURRENT_SELECTION) { |
- // If the flag equals to IN_CURRENT_SELECTION, |
- // this is included in currentSelection but not in lastSelection. |
- this.target_.selectionModel_.setIndexSelected(index, true); |
- } |
- } |
- if (leadIndex != -1) { |
- this.target_.selectionModel_.leadIndex = leadIndex; |
- this.target_.selectionModel_.anchorIndex = leadIndex; |
- } |
- this.target_.selectionModel_.endChange(); |
- this.lastSelection_ = currentSelection; |
- |
- // Update the size of border |
- this.border_.style.left = borderBounds.left + 'px'; |
- this.border_.style.top = borderBounds.top + 'px'; |
- this.border_.style.width = borderBounds.width + 'px'; |
- this.border_.style.height = borderBounds.height + 'px'; |
-}; |
- |
-/** |
- * Handle the mouseup event. |
- * @private |
- * @param {MouseEvent} event The mouseup event. |
- */ |
-DragSelector.prototype.onMouseUp_ = function(event) { |
- this.onMouseMove_(event); |
- this.target_.removeChild(this.border_); |
- this.target_.ownerDocument.removeEventListener( |
- 'mousemove', this.onMouseMoveBound_, true); |
- this.target_.ownerDocument.removeEventListener( |
- 'mouseup', this.onMouseUpBound_, true); |
- cr.dispatchSimpleEvent(this.target_, 'dragselectionend'); |
- this.target_.cachedBounds = null; |
- this.target_ = null; |
- // The target may select an item by reacting to the mouseup event. |
- // This suppress to the selecting behavior. |
- event.stopPropagation(); |
-}; |