summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/devtools/front_end/ui/ResizerWidget.js
diff options
context:
space:
mode:
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.js156
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
+};