Index: remoting/webapp/base/js/message_window.js |
diff --git a/remoting/webapp/base/js/message_window.js b/remoting/webapp/base/js/message_window.js |
index c25f6e367d89d5f13bfe91760465d8d0ef47ff5b..f2c36347eb9ffb6128916a5189d4fe056d515ab2 100644 |
--- a/remoting/webapp/base/js/message_window.js |
+++ b/remoting/webapp/base/js/message_window.js |
@@ -44,16 +44,19 @@ |
}; |
/** |
- * Updates the button label text. |
+ * Initializes the button with the label and the click handler. |
* Hides the button if the label is null or undefined. |
* |
* @param{HTMLElement} button |
* @param{?string} label |
+ * @param{Function} clickHandler |
* @private |
*/ |
-MessageWindowImpl.prototype.updateButton_ = function(button, label) { |
+MessageWindowImpl.prototype.initButton_ = |
+ function(button, label, clickHandler) { |
if (label) { |
button.innerText = label; |
+ button.addEventListener('click', clickHandler, false); |
} |
button.hidden = !Boolean(label); |
}; |
@@ -66,89 +69,86 @@ |
* @private |
*/ |
MessageWindowImpl.prototype.onMessage_ = function(event) { |
- var command = /** @type {string} */ (event.data['command']); |
- if (command !== 'show' && command !== 'update') { |
- console.error('Unexpected message: ' + command); |
- return; |
- } |
+ switch (event.data['command']) { |
+ case 'show': |
+ // Validate the message. |
+ var messageId = /** @type {number} */ (event.data['id']); |
+ var title = /** @type {string} */ (event.data['title']); |
+ var message = /** @type {string} */ (event.data['message']); |
+ var infobox = /** @type {string} */ (event.data['infobox']); |
+ var buttonLabel = /** @type {string} */ (event.data['buttonLabel']); |
+ /** @type {string} */ |
+ var cancelButtonLabel = (event.data['cancelButtonLabel']); |
+ var showSpinner = /** @type {boolean} */ (event.data['showSpinner']); |
+ if (typeof(messageId) != 'number' || |
+ typeof(title) != 'string' || |
+ typeof(message) != 'string' || |
+ typeof(infobox) != 'string' || |
+ typeof(buttonLabel) != 'string' || |
+ typeof(showSpinner) != 'boolean') { |
+ console.log('Bad show message:', event.data); |
+ break; |
+ } |
- // Validate the message. |
- var messageId = /** @type {number} */ (event.data['id']); |
- var title = /** @type {string} */ (event.data['title']); |
- var message = /** @type {string} */ (event.data['message']); |
- var infobox = /** @type {string} */ (event.data['infobox']); |
- var buttonLabel = /** @type {string} */ (event.data['buttonLabel']); |
- var cancelButtonLabel = /** @type {string} */ |
- (event.data['cancelButtonLabel']); |
- var showSpinner = /** @type {boolean} */ (event.data['showSpinner']); |
+ // Set the dialog text. |
+ var button = document.getElementById('button-primary'); |
+ var cancelButton = document.getElementById('button-secondary'); |
+ var messageDiv = document.getElementById('message'); |
+ var infoboxDiv = document.getElementById('infobox'); |
- // Many of these fields are optional for either the 'show' or 'update' |
- // message. These vars are used to mark the optional fields to allow |
- // them to be undefined. |
- var optionalFieldShow = command === 'show'; |
- var optionalFieldUpdate = command === 'update'; |
- if (isNumber(messageId) || |
- isString(title, optionalFieldUpdate) || |
- isString(message, optionalFieldUpdate) || |
- isString(infobox, optionalFieldUpdate) || |
- isString(buttonLabel, optionalFieldUpdate) || |
- isString(cancelButtonLabel, optionalFieldShow || optionalFieldUpdate) || |
- isBoolean(showSpinner, optionalFieldUpdate) { |
- console.log('Bad ' + command + ' message: ' + event.data); |
- return; |
- } |
+ document.getElementById('title').innerText = title; |
+ document.querySelector('title').innerText = title; |
+ messageDiv.innerHTML = message; |
- var button = document.getElementById('button-primary'); |
- var cancelButton = document.getElementById('button-secondary'); |
- var messageDiv = document.getElementById('message'); |
- var infoboxDiv = document.getElementById('infobox'); |
+ if (showSpinner) { |
+ messageDiv.classList.add('waiting'); |
+ messageDiv.classList.add('prominent'); |
+ } |
+ if (infobox != '') { |
+ infoboxDiv.innerText = infobox; |
+ } else { |
+ infoboxDiv.hidden = true; |
+ } |
- if (isString(title)) { |
- document.getElementById('title').innerText = title; |
- document.querySelector('title').innerText = title; |
- } |
- if (isString(message) { |
- messageDiv.innerText = message; |
- } |
- if (isString(infobox)) { |
- if (infobox != '') { |
- infoboxDiv.innerText = infobox; |
- } else { |
- infoboxDiv.hidden = true; |
- } |
- } |
- if (isBoolean(showSpinner)) { |
- if (showSpinner) { |
- messageDiv.classList.add('waiting'); |
- messageDiv.classList.add('prominent'); |
- } else { |
- messageDiv.classList.remove('waiting'); |
- messageDiv.classList.remove('prominent'); |
- } |
- } |
- this.updateButton_(button, buttonLabel); |
- this.updateButton_(cancelButton, cancelButtonLabel); |
+ this.initButton_( |
+ button, |
+ buttonLabel, |
+ this.sendReply_.bind(this, event.source, messageId, 1)); |
- base.resizeWindowToContent(true); |
+ this.initButton_( |
+ cancelButton, |
+ cancelButtonLabel, |
+ this.sendReply_.bind(this, event.source, messageId, 0)); |
- if (command === 'show') { |
- // Set up click-handlers for the buttons. |
- button.addEventListener( |
- 'click', this.sendReply_.bind(this, event.source, messageId, 1), false); |
- cancelButton.addEventListener( |
- 'click', this.sendReply_.bind(this, event.source, messageId, 0), false); |
+ var buttonToFocus = (cancelButtonLabel) ? cancelButton : button; |
+ buttonToFocus.focus(); |
- var buttonToFocus = (cancelButtonLabel) ? cancelButton : button; |
- buttonToFocus.focus(); |
+ // Add a close handler in case the window is closed without clicking one |
+ // of the buttons. This will send a 0 as the result. |
+ // Note that when a button is pressed, this will result in sendReply_ |
+ // being called multiple times (once for the button, once for close). |
+ chrome.app.window.current().onClosed.addListener( |
+ this.sendReply_.bind(this, event.source, messageId, 0)); |
- // Add a close handler in case the window is closed without clicking one |
- // of the buttons. This will send a 0 as the result. |
- // Note that when a button is pressed, this will result in sendReply_ |
- // being called multiple times (once for the button, once for close). |
- chrome.app.window.current().onClosed.addListener( |
- this.sendReply_.bind(this, event.source, messageId, 0)); |
+ base.resizeWindowToContent(true); |
+ chrome.app.window.current().show(); |
+ break; |
- chrome.app.window.current().show(); |
+ case 'update_message': |
+ var message = /** @type {string} */ (event.data['message']); |
+ if (typeof(message) != 'string') { |
+ console.log('Bad update_message message:', event.data); |
+ break; |
+ } |
+ |
+ var messageDiv = document.getElementById('message'); |
+ messageDiv.innerText = message; |
+ |
+ base.resizeWindowToContent(true); |
+ break; |
+ |
+ default: |
+ console.error('Unexpected message:', event.data); |
} |
}; |