diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js')
-rw-r--r-- | chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js b/chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js new file mode 100644 index 00000000000..6e61114093c --- /dev/null +++ b/chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js @@ -0,0 +1,156 @@ +// Copyright 2014 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. + +/** + * @constructor + * @extends {WebInspector.Object} + */ +WebInspector.ResizerWidget = function() +{ + WebInspector.Object.call(this); + + this._isEnabled = true; + this._isVertical = true; + this._elements = []; + this._installDragOnMouseDownBound = this._installDragOnMouseDown.bind(this); +}; + +WebInspector.ResizerWidget.Events = { + ResizeStart: "ResizeStart", + ResizeUpdate: "ResizeUpdate", + ResizeEnd: "ResizeEnd" +}; + +WebInspector.ResizerWidget.prototype = { + /** + * @return {boolean} + */ + isEnabled: function() + { + return this._isEnabled; + }, + + /** + * @param {boolean} enabled + */ + setEnabled: function(enabled) + { + this._isEnabled = enabled; + this._updateElementsClass(); + }, + + /** + * @return {boolean} + */ + isVertical: function() + { + return this._isVertical; + }, + + /** + * Vertical widget resizes height (along y-axis). + * @param {boolean} vertical + */ + setVertical: function(vertical) + { + this._isVertical = vertical; + this._updateElementsClass(); + }, + + /** + * @return {!Array.<!Element>} + */ + elements: function() + { + return this._elements.slice(); + }, + + /** + * @param {!Element} element + */ + addElement: function(element) + { + if (this._elements.indexOf(element) !== -1) + return; + + this._elements.push(element); + element.addEventListener("mousedown", this._installDragOnMouseDownBound, false); + element.classList.toggle("ns-resizer-widget", this._isVertical && this._isEnabled); + element.classList.toggle("ew-resizer-widget", !this._isVertical && this._isEnabled); + }, + + /** + * @param {!Element} element + */ + removeElement: function(element) + { + if (this._elements.indexOf(element) === -1) + return; + + this._elements.remove(element); + element.removeEventListener("mousedown", this._installDragOnMouseDownBound, false); + element.classList.remove("ns-resizer-widget"); + element.classList.remove("ew-resizer-widget"); + }, + + _updateElementsClass: function() + { + for (var i = 0; i < this._elements.length; ++i) { + this._elements[i].classList.toggle("ns-resizer-widget", this._isVertical && this._isEnabled); + this._elements[i].classList.toggle("ew-resizer-widget", !this._isVertical && this._isEnabled); + } + }, + + /** + * @param {?Event} event + */ + _installDragOnMouseDown: function(event) + { + // Only handle drags of the nodes specified. + if (this._elements.indexOf(event.target) === -1) + return false; + WebInspector.elementDragStart(this._dragStart.bind(this), this._drag.bind(this), this._dragEnd.bind(this), this._isVertical ? "ns-resize" : "ew-resize", event); + }, + + /** + * @param {!MouseEvent} event + * @return {boolean} + */ + _dragStart: function(event) + { + if (!this._isEnabled) + return false; + this._startPosition = this._isVertical ? event.pageY : event.pageX; + this.dispatchEventToListeners(WebInspector.ResizerWidget.Events.ResizeStart, { startPosition: this._startPosition, currentPosition: this._startPosition }); + return true; + }, + + /** + * @param {!MouseEvent} event + * @return {boolean} + */ + _drag: function(event) + { + if (!this._isEnabled) { + this._dragEnd(event); + return true; // Cancel drag. + } + + var position = this._isVertical ? event.pageY : event.pageX; + this.dispatchEventToListeners(WebInspector.ResizerWidget.Events.ResizeUpdate, { startPosition: this._startPosition, currentPosition: position, shiftKey: event.shiftKey }); + event.preventDefault(); + return false; // Continue drag. + }, + + /** + * @param {!MouseEvent} event + */ + _dragEnd: function(event) + { + this.dispatchEventToListeners(WebInspector.ResizerWidget.Events.ResizeEnd); + delete this._startPosition; + }, + + __proto__: WebInspector.Object.prototype +}; |