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

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/Dialog.js

Issue 2658383002: [DevTools] Make UI.GlassPane position contentElement for different overlay controls. (Closed)
Patch Set: rebased Created 3 years, 11 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
Index: third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
index f4379fbc56657fae02acb3bb387ccb4c087536df..9fa8219f8f064547e590795bc20642e2d6a006fd 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
@@ -39,11 +39,16 @@ UI.Dialog = class extends UI.Widget {
this.contentElement.createChild('content');
this.contentElement.tabIndex = 0;
- this.contentElement.addEventListener('focus', this._onFocus.bind(this), false);
- this._keyDownBound = this._onKeyDown.bind(this);
-
- this._wrapsContent = false;
+ this.contentElement.addEventListener('focus', this.focus.bind(this), false);
+ this.contentElement.addEventListener('keydown', this._onKeyDown.bind(this), false);
this._dimmed = false;
+ this._wrapsContent = false;
+ this._maxSize = null;
+ /** @type {?number} */
+ this._positionX = null;
+ /** @type {?number} */
+ this._positionY = null;
+
/** @type {!Map<!HTMLElement, number>} */
this._tabIndexMap = new Map();
}
@@ -56,44 +61,25 @@ UI.Dialog = class extends UI.Widget {
}
/**
- * @param {!UI.Widget} view
- */
- static setModalHostView(view) {
- UI.Dialog._modalHostView = view;
- }
-
- /**
- * FIXME: make utility method in Dialog, so clients use it instead of this getter.
- * Method should be like Dialog.showModalElement(position params, reposition callback).
- * @return {?UI.Widget}
- */
- static modalHostView() {
- return UI.Dialog._modalHostView;
- }
-
- static modalHostRepositioned() {
- if (UI.Dialog._instance)
- UI.Dialog._instance._position();
- }
-
- /**
* @override
+ * @suppressGlobalPropertiesCheck
+ * TODO(dgozman): pass document in constructor.
*/
show() {
if (UI.Dialog._instance)
UI.Dialog._instance.detach();
UI.Dialog._instance = this;
- var document = /** @type {!Document} */ (UI.Dialog._modalHostView.element.ownerDocument);
this._disableTabIndexOnElements(document);
- this._glassPane = new UI.GlassPane(document, this._dimmed);
- this._glassPane.element.addEventListener('click', this._onGlassPaneClick.bind(this), false);
- this.element.ownerDocument.body.addEventListener('keydown', this._keyDownBound, false);
-
- super.show(this._glassPane.element);
-
- this._position();
+ this._glassPane = new UI.GlassPane(document, this._dimmed, true /* blockPointerEvents*/, event => {
+ this.detach();
+ event.consume(true);
+ });
+ this._glassPane.show();
+ super.show(this._glassPane.contentElement);
+ this._glassPane.setContentPosition(this._positionX, this._positionY);
+ this._glassPane.setMaxContentSize(this._effectiveMaxSize());
this._focusRestorer = new UI.WidgetFocusRestorer(this);
}
@@ -103,10 +89,8 @@ UI.Dialog = class extends UI.Widget {
detach() {
this._focusRestorer.restore();
- this.element.ownerDocument.body.removeEventListener('keydown', this._keyDownBound, false);
super.detach();
-
- this._glassPane.dispose();
+ this._glassPane.hide();
delete this._glassPane;
this._restoreTabIndexOnElements();
@@ -121,12 +105,12 @@ UI.Dialog = class extends UI.Widget {
}
/**
- * @param {number=} positionX
- * @param {number=} positionY
+ * @param {?number} positionX
+ * @param {?number} positionY
*/
setPosition(positionX, positionY) {
- this._defaultPositionX = positionX;
- this._defaultPositionY = positionY;
+ this._positionX = positionX;
+ this._positionY = positionY;
}
/**
@@ -137,11 +121,20 @@ UI.Dialog = class extends UI.Widget {
}
/**
+ * @return {?UI.Size}
+ */
+ _effectiveMaxSize() {
+ if (!this._wrapsContent)
+ return this._maxSize;
+ return new UI.Size(this.contentElement.offsetWidth, this.contentElement.offsetHeight).clipTo(this._maxSize);
+ }
+
+ /**
* @param {boolean} wraps
*/
setWrapsContent(wraps) {
- this.element.classList.toggle('wraps-content', wraps);
this._wrapsContent = wraps;
+ this.element.classList.toggle('wraps-content', wraps);
}
/**
@@ -152,8 +145,9 @@ UI.Dialog = class extends UI.Widget {
}
contentResized() {
- if (this._wrapsContent)
- this._position();
+ if (!this._wrapsContent || !this._glassPane)
+ return;
+ this._glassPane.setMaxContentSize(this._effectiveMaxSize());
}
/**
@@ -182,58 +176,6 @@ UI.Dialog = class extends UI.Widget {
/**
* @param {!Event} event
*/
- _onFocus(event) {
- this.focus();
- }
-
- /**
- * @param {!Event} event
- */
- _onGlassPaneClick(event) {
- if (!this.element.isSelfOrAncestor(/** @type {?Node} */ (event.target)))
- this.detach();
- }
-
- _position() {
- var container = UI.Dialog._modalHostView.element;
-
- var width = container.offsetWidth - 10;
- var height = container.offsetHeight - 10;
-
- if (this._wrapsContent) {
- width = Math.min(width, this.contentElement.offsetWidth);
- height = Math.min(height, this.contentElement.offsetHeight);
- }
-
- if (this._maxSize) {
- width = Math.min(width, this._maxSize.width);
- height = Math.min(height, this._maxSize.height);
- }
-
- var positionX;
- if (typeof this._defaultPositionX === 'number') {
- positionX = this._defaultPositionX;
- } else {
- positionX = (container.offsetWidth - width) / 2;
- positionX = Number.constrain(positionX, 0, container.offsetWidth - width);
- }
-
- var positionY;
- if (typeof this._defaultPositionY === 'number') {
- positionY = this._defaultPositionY;
- } else {
- positionY = (container.offsetHeight - height) / 2;
- positionY = Number.constrain(positionY, 0, container.offsetHeight - height);
- }
-
- this.element.style.width = width + 'px';
- this.element.style.height = height + 'px';
- this.element.positionAt(positionX, positionY, container);
- }
-
- /**
- * @param {!Event} event
- */
_onKeyDown(event) {
if (event.keyCode === UI.KeyboardShortcut.Keys.Esc.code) {
event.consume(true);
@@ -241,10 +183,3 @@ UI.Dialog = class extends UI.Widget {
}
}
};
-
-
-/** @type {?Element} */
-UI.Dialog._previousFocusedElement = null;
-
-/** @type {?UI.Widget} */
-UI.Dialog._modalHostView = null;

Powered by Google App Engine
This is Rietveld 408576698