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 f2c36347eb9ffb6128916a5189d4fe056d515ab2..c25f6e367d89d5f13bfe91760465d8d0ef47ff5b 100644 |
--- a/remoting/webapp/base/js/message_window.js |
+++ b/remoting/webapp/base/js/message_window.js |
@@ -44,19 +44,16 @@ MessageWindowImpl.prototype.sendReply_ = function( |
}; |
/** |
- * Initializes the button with the label and the click handler. |
+ * Updates the button label text. |
* Hides the button if the label is null or undefined. |
* |
* @param{HTMLElement} button |
* @param{?string} label |
- * @param{Function} clickHandler |
* @private |
*/ |
-MessageWindowImpl.prototype.initButton_ = |
- function(button, label, clickHandler) { |
+MessageWindowImpl.prototype.updateButton_ = function(button, label) { |
if (label) { |
button.innerText = label; |
- button.addEventListener('click', clickHandler, false); |
} |
button.hidden = !Boolean(label); |
}; |
@@ -69,86 +66,89 @@ MessageWindowImpl.prototype.initButton_ = |
* @private |
*/ |
MessageWindowImpl.prototype.onMessage_ = function(event) { |
- 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; |
- } |
- |
- // 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'); |
- |
- document.getElementById('title').innerText = title; |
- document.querySelector('title').innerText = title; |
- messageDiv.innerHTML = message; |
- |
- if (showSpinner) { |
- messageDiv.classList.add('waiting'); |
- messageDiv.classList.add('prominent'); |
- } |
- if (infobox != '') { |
- infoboxDiv.innerText = infobox; |
- } else { |
- infoboxDiv.hidden = true; |
- } |
- |
- this.initButton_( |
- button, |
- buttonLabel, |
- this.sendReply_.bind(this, event.source, messageId, 1)); |
- |
- this.initButton_( |
- cancelButton, |
- cancelButtonLabel, |
- this.sendReply_.bind(this, event.source, messageId, 0)); |
- |
- 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)); |
- |
- base.resizeWindowToContent(true); |
- chrome.app.window.current().show(); |
- break; |
- |
- 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); |
+ var command = /** @type {string} */ (event.data['command']); |
+ if (command !== 'show' && command !== 'update') { |
+ console.error('Unexpected message: ' + command); |
+ return; |
+ } |
+ |
+ // 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']); |
+ |
+ // 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; |
+ } |
+ |
+ var button = document.getElementById('button-primary'); |
+ var cancelButton = document.getElementById('button-secondary'); |
+ var messageDiv = document.getElementById('message'); |
+ var infoboxDiv = document.getElementById('infobox'); |
+ |
+ if (isString(title)) { |
Jamie
2015/05/13 23:43:17
I think (title !== undefined) would be a more natu
garykac
2015/05/15 01:29:36
Done.
|
+ 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); |
+ |
+ base.resizeWindowToContent(true); |
+ |
+ 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(); |
+ |
+ // 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)); |
+ |
+ chrome.app.window.current().show(); |
} |
}; |