| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |  | 
|    2 // Use of this source code is governed by a BSD-style license that can be |  | 
|    3 // found in the LICENSE file. |  | 
|    4  |  | 
|    5 /** |  | 
|    6  * @fileoverview |  | 
|    7  * Class representing an entry in the host-list portion of the home screen. |  | 
|    8  */ |  | 
|    9  |  | 
|   10 'use strict'; |  | 
|   11  |  | 
|   12 /** @suppress {duplicate} */ |  | 
|   13 var remoting = remoting || {}; |  | 
|   14  |  | 
|   15 /** |  | 
|   16  * The deserialized form of the chromoting host as returned by Apiary. |  | 
|   17  * Note that the object has more fields than are detailed below--these |  | 
|   18  * are just the ones that we refer to directly. |  | 
|   19  * @constructor |  | 
|   20  */ |  | 
|   21 remoting.Host = function() { |  | 
|   22   /** @type {string} */ |  | 
|   23   this.hostName = ''; |  | 
|   24   /** @type {string} */ |  | 
|   25   this.hostId = ''; |  | 
|   26   /** @type {string} */ |  | 
|   27   this.status = ''; |  | 
|   28   /** @type {string} */ |  | 
|   29   this.jabberId = ''; |  | 
|   30   /** @type {string} */ |  | 
|   31   this.publicKey = ''; |  | 
|   32 }; |  | 
|   33  |  | 
|   34 /** |  | 
|   35  * An entry in the host table. |  | 
|   36  * @constructor |  | 
|   37  */ |  | 
|   38 remoting.HostTableEntry = function() { |  | 
|   39   /** @type {remoting.Host} */ |  | 
|   40   this.host = null; |  | 
|   41   /** @type {Element} */ |  | 
|   42   this.tableRow = null; |  | 
|   43   /** @type {Element} @private */ |  | 
|   44   this.hostNameCell_ = null; |  | 
|   45   /** @type {function(remoting.HostTableEntry):void} @private */ |  | 
|   46   this.onRename_ = function(hostId) {}; |  | 
|   47   /** @type {function():void} @private */ |  | 
|   48   this.onBlurReference_ = function() {}; |  | 
|   49 }; |  | 
|   50  |  | 
|   51 /** |  | 
|   52  * Create the HTML elements for this entry. |  | 
|   53  * @param {remoting.Host} host The host, as obtained from Apiary. |  | 
|   54  * @param {function(remoting.HostTableEntry):void} onRename Callback for |  | 
|   55  *     rename operations. |  | 
|   56  * @param {function(remoting.HostTableEntry):void} onDelete Callback for |  | 
|   57  *     delete operations. |  | 
|   58  */ |  | 
|   59 remoting.HostTableEntry.prototype.init = function(host, onRename, onDelete) { |  | 
|   60   this.host = host; |  | 
|   61   this.onRename_ = onRename; |  | 
|   62  |  | 
|   63   /** @type {remoting.HostTableEntry} */ |  | 
|   64   var that = this; |  | 
|   65  |  | 
|   66   this.tableRow = document.createElement('tr'); |  | 
|   67   addClass(this.tableRow, 'host-list-row'); |  | 
|   68  |  | 
|   69   // Create the host icon cell. |  | 
|   70   var hostIcon = document.createElement('td'); |  | 
|   71   addClass(hostIcon, 'host-list-row-start'); |  | 
|   72   var hostIconImage = document.createElement('img'); |  | 
|   73   hostIconImage.src = 'icon_host.png'; |  | 
|   74   addClass(hostIconImage, 'host-list-main-icon'); |  | 
|   75   hostIcon.appendChild(hostIconImage); |  | 
|   76   this.tableRow.appendChild(hostIcon); |  | 
|   77  |  | 
|   78   // Create the host name cell. |  | 
|   79   this.hostNameCell_ = document.createElement('td'); |  | 
|   80   addClass(this.hostNameCell_, 'mode-select-label'); |  | 
|   81   this.hostNameCell_.appendChild( |  | 
|   82       document.createTextNode(host.hostName)); |  | 
|   83   this.hostNameCell_.ondblclick = function() { that.beginRename_(); }; |  | 
|   84   this.tableRow.appendChild(this.hostNameCell_); |  | 
|   85  |  | 
|   86   // Create the host status cell. |  | 
|   87   var hostStatus = document.createElement('td'); |  | 
|   88   if (host.status == 'ONLINE') { |  | 
|   89     var hostUrl = chrome.extension.getURL('choice.html') + |  | 
|   90         '?mode=me2me&hostId=' + encodeURIComponent(host.hostId); |  | 
|   91     var connectButton = document.createElement('button'); |  | 
|   92     connectButton.setAttribute('class', 'mode-select-button'); |  | 
|   93     connectButton.setAttribute('type', 'button'); |  | 
|   94     var startMe2Me = function() { window.location.replace(hostUrl); }; |  | 
|   95     connectButton.addEventListener('click', startMe2Me, false); |  | 
|   96     connectButton.innerHTML = |  | 
|   97         chrome.i18n.getMessage(/*i18n-content*/'CONNECT_BUTTON'); |  | 
|   98     hostStatus.appendChild(connectButton); |  | 
|   99   } else { |  | 
|  100     addClass(this.tableRow, 'host-offline'); |  | 
|  101     hostStatus.innerHTML = chrome.i18n.getMessage(/*i18n-content*/'OFFLINE'); |  | 
|  102   } |  | 
|  103   hostStatus.className = 'host-list-row-end'; |  | 
|  104   this.tableRow.appendChild(hostStatus); |  | 
|  105  |  | 
|  106   // Create the host rename cell. |  | 
|  107   var editButton = document.createElement('td'); |  | 
|  108   editButton.onclick = function() { that.beginRename_(); }; |  | 
|  109   addClass(editButton, 'clickable'); |  | 
|  110   addClass(editButton, 'host-list-edit'); |  | 
|  111   var penImage = document.createElement('img'); |  | 
|  112   penImage.src = 'icon_pencil.png'; |  | 
|  113   addClass(penImage, 'host-list-rename-icon'); |  | 
|  114   editButton.appendChild(penImage); |  | 
|  115   this.tableRow.appendChild(editButton); |  | 
|  116  |  | 
|  117   // Create the host delete cell. |  | 
|  118   var deleteButton = document.createElement('td'); |  | 
|  119   deleteButton.onclick = function() { onDelete(that); } |  | 
|  120   addClass(deleteButton, 'clickable'); |  | 
|  121   addClass(deleteButton, 'host-list-edit'); |  | 
|  122   var crossImage = document.createElement('img'); |  | 
|  123   crossImage.src = 'icon_cross.png'; |  | 
|  124   addClass(crossImage, 'host-list-remove-icon'); |  | 
|  125   deleteButton.appendChild(crossImage); |  | 
|  126   this.tableRow.appendChild(deleteButton); |  | 
|  127 }; |  | 
|  128  |  | 
|  129 /** |  | 
|  130  * Prepare the host for renaming by replacing its name with an edit box. |  | 
|  131  * @return {void} Nothing. |  | 
|  132  * @private |  | 
|  133  */ |  | 
|  134 remoting.HostTableEntry.prototype.beginRename_ = function() { |  | 
|  135   var editBox = /** @type {HTMLInputElement} */ document.createElement('input'); |  | 
|  136   editBox.type = 'text'; |  | 
|  137   editBox.value = this.host.hostName; |  | 
|  138   this.hostNameCell_.innerHTML = ''; |  | 
|  139   this.hostNameCell_.appendChild(editBox); |  | 
|  140   editBox.select(); |  | 
|  141  |  | 
|  142   /** @type {remoting.HostTableEntry} */ |  | 
|  143   var that = this; |  | 
|  144   // Keep a reference to the blur event handler so that we can remove it later. |  | 
|  145   this.onBlurReference_ = function() { that.commitRename_(); }; |  | 
|  146   editBox.addEventListener('blur', this.onBlurReference_, false); |  | 
|  147  |  | 
|  148   /** @param {Event} event The keydown event. */ |  | 
|  149   var onKeydown = function(event) { that.onKeydown_(event); } |  | 
|  150   editBox.addEventListener('keydown', onKeydown, false); |  | 
|  151 }; |  | 
|  152  |  | 
|  153 /** |  | 
|  154  * Accept the hostname entered by the user. |  | 
|  155  * @return {void} Nothing. |  | 
|  156  * @private |  | 
|  157  */ |  | 
|  158 remoting.HostTableEntry.prototype.commitRename_ = function() { |  | 
|  159   var editBox = this.hostNameCell_.querySelector('input'); |  | 
|  160   if (editBox) { |  | 
|  161     if (this.host.hostName != editBox.value) { |  | 
|  162       this.host.hostName = editBox.value; |  | 
|  163       this.onRename_(this); |  | 
|  164     } |  | 
|  165     this.removeEditBox_(); |  | 
|  166   } |  | 
|  167 }; |  | 
|  168  |  | 
|  169 /** |  | 
|  170  * Remove the edit box corresponding to the specified host, and reset its name. |  | 
|  171  * @return {void} Nothing. |  | 
|  172  * @private |  | 
|  173  */ |  | 
|  174 remoting.HostTableEntry.prototype.removeEditBox_ = function() { |  | 
|  175   var editBox = this.hostNameCell_.querySelector('input'); |  | 
|  176   if (editBox) { |  | 
|  177     // onblur will fire when the edit box is removed, so remove the hook. |  | 
|  178     editBox.removeEventListener('blur', this.onBlurReference_, false); |  | 
|  179   } |  | 
|  180   this.hostNameCell_.innerHTML = '';  // Remove the edit box. |  | 
|  181   this.hostNameCell_.appendChild(document.createTextNode(this.host.hostName)); |  | 
|  182 }; |  | 
|  183  |  | 
|  184 /** |  | 
|  185  * Handle a key event while the user is typing a host name |  | 
|  186  * @param {Event} event The keyboard event. |  | 
|  187  * @return {void} Nothing. |  | 
|  188  * @private |  | 
|  189  */ |  | 
|  190 remoting.HostTableEntry.prototype.onKeydown_ = function(event) { |  | 
|  191   if (event.which == 27) {  // Escape |  | 
|  192     this.removeEditBox_(); |  | 
|  193   } else if (event.which == 13) {  // Enter |  | 
|  194     this.commitRename_(); |  | 
|  195   } |  | 
|  196 }; |  | 
| OLD | NEW |