// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. 'use strict'; tvcm.require('tvcm.utils'); tvcm.require('tvcm.ui'); tvcm.requireTemplate('ui.spy'); tvcm.exportTo('ui', function() { /** * @constructor */ var LogMessage = tvcm.ui.define('x-spy-log-message'); LogMessage.prototype = { __proto__: HTMLUnknownElement.prototype, decorate: function() { }, get message() { return message_; }, set message(message) { this.message_ = message; this.textContent = JSON.stringify(message); } }; /** * @constructor */ var Spy = tvcm.ui.define('x-spy'); Spy.prototype = { __proto__: HTMLUnknownElement.prototype, decorate: function() { var node = tvcm.instantiateTemplate('#x-spy-template'); this.appendChild(node); this.channel_ = undefined; this.onMessage_ = this.onMessage_.bind(this); var commandEl = this.querySelector('#command'); commandEl.addEventListener('keydown', function(e) { if (e.keyCode == 13) { e.stopPropagation(); this.onCommandEntered_(); } }.bind(this)); this.updateDisabledStates_(); }, get channel() { return channel_; }, set channel(channel) { if (this.channel_) this.channel_.removeEventListener('message', this.onMessage_); this.channel_ = channel; if (this.channel_) this.channel_.addEventListener('message', this.onMessage_); this.updateDisabledStates_(); }, updateDisabledStates_: function() { var connected = this.channel_ !== undefined; this.querySelector('#command').disabled = !connected; }, onCommandEntered_: function(cmd) { var commandEl = this.querySelector('#command'); this.channel_.send(JSON.stringify(commandEl.value)); commandEl.value = ''; }, onMessage_: function(message) { var messageEl = new LogMessage(); messageEl.message = message.data; this.querySelector('messages').appendChild(messageEl); } }; return { Spy: Spy }; });