| Index: Source/devtools/front_end/ui/View.js
|
| diff --git a/Source/devtools/front_end/ui/View.js b/Source/devtools/front_end/ui/View.js
|
| deleted file mode 100644
|
| index 9ec8122bced55fa7858a308206605f8852ade71e..0000000000000000000000000000000000000000
|
| --- a/Source/devtools/front_end/ui/View.js
|
| +++ /dev/null
|
| @@ -1,687 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2008 Apple Inc. All Rights Reserved.
|
| - * Copyright (C) 2011 Google Inc. All Rights Reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.Object}
|
| - * @param {boolean=} isWebComponent
|
| - */
|
| -WebInspector.View = function(isWebComponent)
|
| -{
|
| - this.contentElement = createElementWithClass("div", "view");
|
| - if (isWebComponent) {
|
| - WebInspector.installComponentRootStyles(this.contentElement);
|
| - this.element = createElementWithClass("div", "vbox flex-auto");
|
| - this._shadowRoot = this.element.createShadowRoot();
|
| - this._shadowRoot.appendChild(this.contentElement);
|
| - } else {
|
| - this.element = this.contentElement;
|
| - }
|
| - this._isWebComponent = isWebComponent;
|
| - this.element.__view = this;
|
| - this._visible = true;
|
| - this._isRoot = false;
|
| - this._isShowing = false;
|
| - this._children = [];
|
| - this._hideOnDetach = false;
|
| - this._notificationDepth = 0;
|
| -}
|
| -
|
| -/**
|
| - * @param {string} cssFile
|
| - * @return {!Element}
|
| - */
|
| -WebInspector.View.createStyleElement = function(cssFile)
|
| -{
|
| - var content = Runtime.cachedResources[cssFile] || "";
|
| - if (!content)
|
| - console.error(cssFile + " not preloaded. Check module.json");
|
| - var styleElement = createElement("style");
|
| - styleElement.type = "text/css";
|
| - styleElement.textContent = content;
|
| - return styleElement;
|
| -}
|
| -
|
| -WebInspector.View.prototype = {
|
| - markAsRoot: function()
|
| - {
|
| - WebInspector.installComponentRootStyles(this.element);
|
| - WebInspector.View.__assert(!this.element.parentElement, "Attempt to mark as root attached node");
|
| - this._isRoot = true;
|
| - },
|
| -
|
| - /**
|
| - * @return {?WebInspector.View}
|
| - */
|
| - parentView: function()
|
| - {
|
| - return this._parentView;
|
| - },
|
| -
|
| - /**
|
| - * @return {!Array.<!WebInspector.View>}
|
| - */
|
| - children: function()
|
| - {
|
| - return this._children;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.View} view
|
| - * @protected
|
| - */
|
| - childWasDetached: function(view)
|
| - {
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - isShowing: function()
|
| - {
|
| - return this._isShowing;
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _shouldHideOnDetach: function()
|
| - {
|
| - if (this._hideOnDetach)
|
| - return true;
|
| - for (var child of this._children) {
|
| - if (child._shouldHideOnDetach())
|
| - return true;
|
| - }
|
| - return false;
|
| - },
|
| -
|
| - setHideOnDetach: function()
|
| - {
|
| - this._hideOnDetach = true;
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _inNotification: function()
|
| - {
|
| - return !!this._notificationDepth || (this._parentView && this._parentView._inNotification());
|
| - },
|
| -
|
| - _parentIsShowing: function()
|
| - {
|
| - if (this._isRoot)
|
| - return true;
|
| - return this._parentView && this._parentView.isShowing();
|
| - },
|
| -
|
| - /**
|
| - * @param {function(this:WebInspector.View)} method
|
| - */
|
| - _callOnVisibleChildren: function(method)
|
| - {
|
| - var copy = this._children.slice();
|
| - for (var i = 0; i < copy.length; ++i) {
|
| - if (copy[i]._parentView === this && copy[i]._visible)
|
| - method.call(copy[i]);
|
| - }
|
| - },
|
| -
|
| - _processWillShow: function()
|
| - {
|
| - this._callOnVisibleChildren(this._processWillShow);
|
| - this._isShowing = true;
|
| - },
|
| -
|
| - _processWasShown: function()
|
| - {
|
| - if (this._inNotification())
|
| - return;
|
| - this.restoreScrollPositions();
|
| - this._notify(this.wasShown);
|
| - this._callOnVisibleChildren(this._processWasShown);
|
| - },
|
| -
|
| - _processWillHide: function()
|
| - {
|
| - if (this._inNotification())
|
| - return;
|
| - this.storeScrollPositions();
|
| -
|
| - this._callOnVisibleChildren(this._processWillHide);
|
| - this._notify(this.willHide);
|
| - this._isShowing = false;
|
| - },
|
| -
|
| - _processWasHidden: function()
|
| - {
|
| - this._callOnVisibleChildren(this._processWasHidden);
|
| - },
|
| -
|
| - _processOnResize: function()
|
| - {
|
| - if (this._inNotification())
|
| - return;
|
| - if (!this.isShowing())
|
| - return;
|
| - this._notify(this.onResize);
|
| - this._callOnVisibleChildren(this._processOnResize);
|
| - },
|
| -
|
| - /**
|
| - * @param {function(this:WebInspector.View)} notification
|
| - */
|
| - _notify: function(notification)
|
| - {
|
| - ++this._notificationDepth;
|
| - try {
|
| - notification.call(this);
|
| - } finally {
|
| - --this._notificationDepth;
|
| - }
|
| - },
|
| -
|
| - wasShown: function()
|
| - {
|
| - },
|
| -
|
| - willHide: function()
|
| - {
|
| - },
|
| -
|
| - onResize: function()
|
| - {
|
| - },
|
| -
|
| - onLayout: function()
|
| - {
|
| - },
|
| -
|
| - /**
|
| - * @param {?Element} parentElement
|
| - * @param {?Element=} insertBefore
|
| - */
|
| - show: function(parentElement, insertBefore)
|
| - {
|
| - WebInspector.View.__assert(parentElement, "Attempt to attach view with no parent element");
|
| -
|
| - // Update view hierarchy
|
| - if (this.element.parentElement !== parentElement) {
|
| - if (this.element.parentElement)
|
| - this.detach();
|
| -
|
| - var currentParent = parentElement;
|
| - while (currentParent && !currentParent.__view)
|
| - currentParent = currentParent.parentElementOrShadowHost();
|
| -
|
| - if (currentParent) {
|
| - this._parentView = currentParent.__view;
|
| - this._parentView._children.push(this);
|
| - this._isRoot = false;
|
| - } else
|
| - WebInspector.View.__assert(this._isRoot, "Attempt to attach view to orphan node");
|
| - } else if (this._visible) {
|
| - return;
|
| - }
|
| -
|
| - this._visible = true;
|
| -
|
| - if (this._parentIsShowing())
|
| - this._processWillShow();
|
| -
|
| - this.element.classList.add("visible");
|
| -
|
| - // Reparent
|
| - if (this.element.parentElement !== parentElement) {
|
| - WebInspector.View._incrementViewCounter(parentElement, this.element);
|
| - if (insertBefore)
|
| - WebInspector.View._originalInsertBefore.call(parentElement, this.element, insertBefore);
|
| - else
|
| - WebInspector.View._originalAppendChild.call(parentElement, this.element);
|
| - }
|
| -
|
| - if (this._parentIsShowing())
|
| - this._processWasShown();
|
| -
|
| - if (this._parentView && this._hasNonZeroConstraints())
|
| - this._parentView.invalidateConstraints();
|
| - else
|
| - this._processOnResize();
|
| - },
|
| -
|
| - /**
|
| - * @param {boolean=} overrideHideOnDetach
|
| - */
|
| - detach: function(overrideHideOnDetach)
|
| - {
|
| - var parentElement = this.element.parentElement;
|
| - if (!parentElement)
|
| - return;
|
| -
|
| - if (this._parentIsShowing())
|
| - this._processWillHide();
|
| -
|
| - if (!overrideHideOnDetach && this._shouldHideOnDetach()) {
|
| - this.element.classList.remove("visible");
|
| - this._visible = false;
|
| - if (this._parentIsShowing())
|
| - this._processWasHidden();
|
| - if (this._parentView && this._hasNonZeroConstraints())
|
| - this._parentView.invalidateConstraints();
|
| - return;
|
| - }
|
| -
|
| - // Force legal removal
|
| - WebInspector.View._decrementViewCounter(parentElement, this.element);
|
| - WebInspector.View._originalRemoveChild.call(parentElement, this.element);
|
| -
|
| - this._visible = false;
|
| - if (this._parentIsShowing())
|
| - this._processWasHidden();
|
| -
|
| - // Update view hierarchy
|
| - if (this._parentView) {
|
| - var childIndex = this._parentView._children.indexOf(this);
|
| - WebInspector.View.__assert(childIndex >= 0, "Attempt to remove non-child view");
|
| - this._parentView._children.splice(childIndex, 1);
|
| - this._parentView.childWasDetached(this);
|
| - var parent = this._parentView;
|
| - this._parentView = null;
|
| - if (this._hasNonZeroConstraints())
|
| - parent.invalidateConstraints();
|
| - } else
|
| - WebInspector.View.__assert(this._isRoot, "Removing non-root view from DOM");
|
| - },
|
| -
|
| - detachChildViews: function()
|
| - {
|
| - var children = this._children.slice();
|
| - for (var i = 0; i < children.length; ++i)
|
| - children[i].detach();
|
| - },
|
| -
|
| - /**
|
| - * @return {!Array.<!Element>}
|
| - */
|
| - elementsToRestoreScrollPositionsFor: function()
|
| - {
|
| - return [this.element];
|
| - },
|
| -
|
| - storeScrollPositions: function()
|
| - {
|
| - var elements = this.elementsToRestoreScrollPositionsFor();
|
| - for (var i = 0; i < elements.length; ++i) {
|
| - var container = elements[i];
|
| - container._scrollTop = container.scrollTop;
|
| - container._scrollLeft = container.scrollLeft;
|
| - }
|
| - },
|
| -
|
| - restoreScrollPositions: function()
|
| - {
|
| - var elements = this.elementsToRestoreScrollPositionsFor();
|
| - for (var i = 0; i < elements.length; ++i) {
|
| - var container = elements[i];
|
| - if (container._scrollTop)
|
| - container.scrollTop = container._scrollTop;
|
| - if (container._scrollLeft)
|
| - container.scrollLeft = container._scrollLeft;
|
| - }
|
| - },
|
| -
|
| - doResize: function()
|
| - {
|
| - if (!this.isShowing())
|
| - return;
|
| - // No matter what notification we are in, dispatching onResize is not needed.
|
| - if (!this._inNotification())
|
| - this._callOnVisibleChildren(this._processOnResize);
|
| - },
|
| -
|
| - doLayout: function()
|
| - {
|
| - if (!this.isShowing())
|
| - return;
|
| - this._notify(this.onLayout);
|
| - this.doResize();
|
| - },
|
| -
|
| - /**
|
| - * @param {string} cssFile
|
| - */
|
| - registerRequiredCSS: function(cssFile)
|
| - {
|
| - (this._isWebComponent ? this._shadowRoot : this.element).appendChild(WebInspector.View.createStyleElement(cssFile));
|
| - },
|
| -
|
| - printViewHierarchy: function()
|
| - {
|
| - var lines = [];
|
| - this._collectViewHierarchy("", lines);
|
| - console.log(lines.join("\n"));
|
| - },
|
| -
|
| - _collectViewHierarchy: function(prefix, lines)
|
| - {
|
| - lines.push(prefix + "[" + this.element.className + "]" + (this._children.length ? " {" : ""));
|
| -
|
| - for (var i = 0; i < this._children.length; ++i)
|
| - this._children[i]._collectViewHierarchy(prefix + " ", lines);
|
| -
|
| - if (this._children.length)
|
| - lines.push(prefix + "}");
|
| - },
|
| -
|
| - /**
|
| - * @return {!Element}
|
| - */
|
| - defaultFocusedElement: function()
|
| - {
|
| - return this._defaultFocusedElement || this.element;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} element
|
| - */
|
| - setDefaultFocusedElement: function(element)
|
| - {
|
| - this._defaultFocusedElement = element;
|
| - },
|
| -
|
| - focus: function()
|
| - {
|
| - var element = this.defaultFocusedElement();
|
| - if (!element || element.isAncestor(this.element.ownerDocument.activeElement))
|
| - return;
|
| -
|
| - WebInspector.setCurrentFocusElement(element);
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - hasFocus: function()
|
| - {
|
| - var activeElement = this.element.ownerDocument.activeElement;
|
| - return activeElement && activeElement.isSelfOrDescendant(this.element);
|
| - },
|
| -
|
| - /**
|
| - * @return {!Size}
|
| - */
|
| - measurePreferredSize: function()
|
| - {
|
| - var document = this.element.ownerDocument;
|
| - WebInspector.View._originalAppendChild.call(document.body, this.element);
|
| - this.element.positionAt(0, 0);
|
| - var result = new Size(this.element.offsetWidth, this.element.offsetHeight);
|
| - this.element.positionAt(undefined, undefined);
|
| - WebInspector.View._originalRemoveChild.call(document.body, this.element);
|
| - return result;
|
| - },
|
| -
|
| - /**
|
| - * @return {!Constraints}
|
| - */
|
| - calculateConstraints: function()
|
| - {
|
| - return new Constraints();
|
| - },
|
| -
|
| - /**
|
| - * @return {!Constraints}
|
| - */
|
| - constraints: function()
|
| - {
|
| - if (typeof this._constraints !== "undefined")
|
| - return this._constraints;
|
| - if (typeof this._cachedConstraints === "undefined")
|
| - this._cachedConstraints = this.calculateConstraints();
|
| - return this._cachedConstraints;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} width
|
| - * @param {number} height
|
| - * @param {number} preferredWidth
|
| - * @param {number} preferredHeight
|
| - */
|
| - setMinimumAndPreferredSizes: function(width, height, preferredWidth, preferredHeight)
|
| - {
|
| - this._constraints = new Constraints(new Size(width, height), new Size(preferredWidth, preferredHeight));
|
| - this.invalidateConstraints();
|
| - },
|
| -
|
| - /**
|
| - * @param {number} width
|
| - * @param {number} height
|
| - */
|
| - setMinimumSize: function(width, height)
|
| - {
|
| - this._constraints = new Constraints(new Size(width, height));
|
| - this.invalidateConstraints();
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _hasNonZeroConstraints: function()
|
| - {
|
| - var constraints = this.constraints();
|
| - return !!(constraints.minimum.width || constraints.minimum.height || constraints.preferred.width || constraints.preferred.height);
|
| - },
|
| -
|
| - invalidateConstraints: function()
|
| - {
|
| - var cached = this._cachedConstraints;
|
| - delete this._cachedConstraints;
|
| - var actual = this.constraints();
|
| - if (!actual.isEqual(cached) && this._parentView)
|
| - this._parentView.invalidateConstraints();
|
| - else
|
| - this.doLayout();
|
| - },
|
| -
|
| - __proto__: WebInspector.Object.prototype
|
| -}
|
| -
|
| -WebInspector.View._originalAppendChild = Element.prototype.appendChild;
|
| -WebInspector.View._originalInsertBefore = Element.prototype.insertBefore;
|
| -WebInspector.View._originalRemoveChild = Element.prototype.removeChild;
|
| -WebInspector.View._originalRemoveChildren = Element.prototype.removeChildren;
|
| -
|
| -WebInspector.View._incrementViewCounter = function(parentElement, childElement)
|
| -{
|
| - var count = (childElement.__viewCounter || 0) + (childElement.__view ? 1 : 0);
|
| - if (!count)
|
| - return;
|
| -
|
| - while (parentElement) {
|
| - parentElement.__viewCounter = (parentElement.__viewCounter || 0) + count;
|
| - parentElement = parentElement.parentElementOrShadowHost();
|
| - }
|
| -}
|
| -
|
| -WebInspector.View._decrementViewCounter = function(parentElement, childElement)
|
| -{
|
| - var count = (childElement.__viewCounter || 0) + (childElement.__view ? 1 : 0);
|
| - if (!count)
|
| - return;
|
| -
|
| - while (parentElement) {
|
| - parentElement.__viewCounter -= count;
|
| - parentElement = parentElement.parentElementOrShadowHost();
|
| - }
|
| -}
|
| -
|
| -WebInspector.View.__assert = function(condition, message)
|
| -{
|
| - if (!condition) {
|
| - console.trace();
|
| - throw new Error(message);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.View}
|
| - * @param {boolean=} isWebComponent
|
| - */
|
| -WebInspector.VBox = function(isWebComponent)
|
| -{
|
| - WebInspector.View.call(this, isWebComponent);
|
| - this.contentElement.classList.add("vbox");
|
| -};
|
| -
|
| -WebInspector.VBox.prototype = {
|
| - /**
|
| - * @override
|
| - * @return {!Constraints}
|
| - */
|
| - calculateConstraints: function()
|
| - {
|
| - var constraints = new Constraints();
|
| -
|
| - /**
|
| - * @this {!WebInspector.View}
|
| - * @suppressReceiverCheck
|
| - */
|
| - function updateForChild()
|
| - {
|
| - var child = this.constraints();
|
| - constraints = constraints.widthToMax(child);
|
| - constraints = constraints.addHeight(child);
|
| - }
|
| -
|
| - this._callOnVisibleChildren(updateForChild);
|
| - return constraints;
|
| - },
|
| -
|
| - __proto__: WebInspector.View.prototype
|
| -};
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.View}
|
| - * @param {boolean=} isWebComponent
|
| - */
|
| -WebInspector.HBox = function(isWebComponent)
|
| -{
|
| - WebInspector.View.call(this, isWebComponent);
|
| - this.contentElement.classList.add("hbox");
|
| -};
|
| -
|
| -WebInspector.HBox.prototype = {
|
| - /**
|
| - * @override
|
| - * @return {!Constraints}
|
| - */
|
| - calculateConstraints: function()
|
| - {
|
| - var constraints = new Constraints();
|
| -
|
| - /**
|
| - * @this {!WebInspector.View}
|
| - * @suppressReceiverCheck
|
| - */
|
| - function updateForChild()
|
| - {
|
| - var child = this.constraints();
|
| - constraints = constraints.addWidth(child);
|
| - constraints = constraints.heightToMax(child);
|
| - }
|
| -
|
| - this._callOnVisibleChildren(updateForChild);
|
| - return constraints;
|
| - },
|
| -
|
| - __proto__: WebInspector.View.prototype
|
| -};
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.VBox}
|
| - * @param {function()} resizeCallback
|
| - */
|
| -WebInspector.VBoxWithResizeCallback = function(resizeCallback)
|
| -{
|
| - WebInspector.VBox.call(this);
|
| - this._resizeCallback = resizeCallback;
|
| -}
|
| -
|
| -WebInspector.VBoxWithResizeCallback.prototype = {
|
| - onResize: function()
|
| - {
|
| - this._resizeCallback();
|
| - },
|
| -
|
| - __proto__: WebInspector.VBox.prototype
|
| -}
|
| -
|
| -/**
|
| - * @override
|
| - * @param {?Node} child
|
| - * @return {?Node}
|
| - * @suppress {duplicate}
|
| - */
|
| -Element.prototype.appendChild = function(child)
|
| -{
|
| - WebInspector.View.__assert(!child.__view || child.parentElement === this, "Attempt to add view via regular DOM operation.");
|
| - return WebInspector.View._originalAppendChild.call(this, child);
|
| -}
|
| -
|
| -/**
|
| - * @override
|
| - * @param {?Node} child
|
| - * @param {?Node} anchor
|
| - * @return {!Node}
|
| - * @suppress {duplicate}
|
| - */
|
| -Element.prototype.insertBefore = function(child, anchor)
|
| -{
|
| - WebInspector.View.__assert(!child.__view || child.parentElement === this, "Attempt to add view via regular DOM operation.");
|
| - return WebInspector.View._originalInsertBefore.call(this, child, anchor);
|
| -}
|
| -
|
| -/**
|
| - * @override
|
| - * @param {?Node} child
|
| - * @return {!Node}
|
| - * @suppress {duplicate}
|
| - */
|
| -Element.prototype.removeChild = function(child)
|
| -{
|
| - WebInspector.View.__assert(!child.__viewCounter && !child.__view, "Attempt to remove element containing view via regular DOM operation");
|
| - return WebInspector.View._originalRemoveChild.call(this, child);
|
| -}
|
| -
|
| -Element.prototype.removeChildren = function()
|
| -{
|
| - WebInspector.View.__assert(!this.__viewCounter, "Attempt to remove element containing view via regular DOM operation");
|
| - WebInspector.View._originalRemoveChildren.call(this);
|
| -}
|
|
|