Index: remoting/webapp/base/js/modal_dialogs.js |
diff --git a/remoting/webapp/base/js/modal_dialogs.js b/remoting/webapp/base/js/modal_dialogs.js |
index 9c489b3154178259fa55558be95ec3c5525a1b30..bd7132eaed6711030844ee41869157b37db1c152 100644 |
--- a/remoting/webapp/base/js/modal_dialogs.js |
+++ b/remoting/webapp/base/js/modal_dialogs.js |
@@ -158,6 +158,89 @@ remoting.MessageDialog.prototype.onClicked_ = function(result) { |
this.dispose(); |
}; |
+ |
+ |
+/** |
+ * A promise-based dialog implementation using HTML Dialog element. |
Jamie
2015/05/20 02:20:37
s/Dialog/<dialog>/
kelvinp
2015/05/20 18:13:00
Done.
|
+ * |
+ * @param {HTMLDialogElement} dialog |
+ * @param {HTMLElement} primaryButton |
+ * @param {HTMLElement=} opt_secondaryButton |
+ * @constructor |
+ * |
+ * @implements {remoting.WindowShape.ClientUI} |
+ * @implements {base.Disposable} |
+ */ |
+remoting.Html5ModalDialog = function(dialog, primaryButton, |
+ opt_secondaryButton) { |
+ /** @private */ |
+ this.dialog_ = dialog; |
+ /** @private {base.Disposables} */ |
+ this.eventHooks_ = new base.Disposables( |
+ new base.DomEventHook(dialog, 'cancel', this.onCancel_.bind(this), false), |
kelvinp
2015/05/20 01:27:31
This is called when the user press Escape.
|
+ new base.DomEventHook( |
+ primaryButton, 'click', |
+ this.onClicked_.bind(this, remoting.MessageDialog.Result.PRIMARY), |
+ false) |
+ ); |
+ |
+ if (opt_secondaryButton) { |
+ this.eventHooks_.add(new base.DomEventHook( |
+ opt_secondaryButton, 'click', |
+ this.onClicked_.bind(this, remoting.MessageDialog.Result.SECONDARY), |
+ false)); |
+ } |
+ |
+ /** @private {base.Deferred} */ |
+ this.deferred_ = null; |
+ remoting.windowShape.registerClientUI(this); |
+}; |
+ |
+remoting.Html5ModalDialog.prototype.dispose = function() { |
+ base.dispose(this.eventHooks_); |
+ remoting.windowShape.unregisterClientUI(this); |
+}; |
+ |
+/** |
+ * @return {Promise<remoting.MessageDialog.Result>} Promise that resolves with |
+ * the button clicked. |
+ */ |
+remoting.Html5ModalDialog.prototype.show = function() { |
+ base.debug.assert(this.deferred_ === null); |
+ this.deferred_ = new base.Deferred(); |
+ this.dialog_.showModal(); |
+ |
+ remoting.windowShape.centerToDesktop(this.dialog_); |
+ return this.deferred_.promise(); |
+}; |
+ |
+/** @param {Event} e */ |
+remoting.Html5ModalDialog.prototype.onCancel_ = function(e) { |
+ e.preventDefault(); |
Jamie
2015/05/20 02:20:37
I'm not sure that a generic Html5ModalDialog class
kelvinp
2015/05/20 18:13:00
Done.
|
+}; |
+ |
+/** |
+ * @param {remoting.MessageDialog.Result} result |
+ * @private |
+ */ |
+remoting.Html5ModalDialog.prototype.onClicked_ = function(result) { |
+ this.dialog_.close(); |
+ this.deferred_.resolve(result); |
+ this.deferred_ = null; |
+ this.dispose(); |
+}; |
+ |
+remoting.Html5ModalDialog.prototype.addToRegion = function(rects) { |
+ var rect = /** @type {ClientRect} */(this.dialog_.getBoundingClientRect()); |
+ rects.push({ |
+ left: rect.left, |
+ top: rect.top, |
+ width: rect.width, |
+ height: rect.height |
+ }); |
+}; |
+ |
+ |
/** |
* @param {Function} cancelCallback The callback to invoke when the user clicks |
* on the cancel button. |