Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2210)

Unified Diff: Source/devtools/front_end/ui/View.js

Issue 1113813002: [DevTools] Rename View to Widget. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/ui/UIUtils.js ('k') | Source/devtools/front_end/ui/Widget.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
-}
« no previous file with comments | « Source/devtools/front_end/ui/UIUtils.js ('k') | Source/devtools/front_end/ui/Widget.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698